运行时可以动态增大进程栈空间吗?
我知道在运行时,系统会给进程分配默认大小的堆栈空间,而默认堆空间使用完时可以动态的申请额外的内存空间,那么栈在程序(进程)运行时可以动态的增大栈空间吗?如果可以,那有极限吗?是内存硬件极限,还是系统限制的极限?
请为我解惑啊!!!!谢谢!!! 进程栈空间
[解决办法]
Windows 堆栈空间是属于线程的;
Win32
不做任何处理的话,分配默认大小空间(1M 或者2M);
但是提交很少的内存,随着堆栈空间的增长,逐渐提交,直到用完或者溢出。
如果手动控制的话,可以重新设置新的堆栈的指针,那么堆栈大小就是用户分配的大小。
在函数返回时要恢复堆栈指针,没有恢复之前,不能产生未处理异常。
不过几乎没有代码。手动设置堆栈指针。
这样堆栈的大小是固定的,不过提交的页面是可以动态增加的。
堆栈默认大小,可以在编译时设置,也有预编译指令可以设置,设置的大小也是固定的。
[解决办法]
动态增大栈?没听过,一般都是在事先设置好的。一般没必要用那么大的栈吧,除非递归什么的。不过递归也不建议调大栈空间吧。
动态分配(堆)要说极限的话,逻辑上的问题一般,都是有操作系统来处理的,不一定有多少空间就一定会分配,比如有内存碎片什么的导致空间浪费,硬件上的话,主要还是硬件本身能提供多少的问题吧。
[解决办法]
有操作系统支持栈的自动增长的。
平坦模式的os可能有点困难;段模式的os应该比较容易实现。
[解决办法]
通常需要很大栈空间的行为属于设计错误。
[解决办法]