首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

运行时可以动态增大进程栈空间吗?该怎么解决

2013-11-11 
运行时可以动态增大进程栈空间吗?我知道在运行时,系统会给进程分配默认大小的堆栈空间,而默认堆空间使用完

运行时可以动态增大进程栈空间吗?
         我知道在运行时,系统会给进程分配默认大小的堆栈空间,而默认堆空间使用完时可以动态的申请额外的内存空间,那么栈在程序(进程)运行时可以动态的增大栈空间吗?如果可以,那有极限吗?是内存硬件极限,还是系统限制的极限?
请为我解惑啊!!!!谢谢!!! 进程栈空间
[解决办法]
Windows 堆栈空间是属于线程的;
Win32
不做任何处理的话,分配默认大小空间(1M 或者2M);
但是提交很少的内存,随着堆栈空间的增长,逐渐提交,直到用完或者溢出。

如果手动控制的话,可以重新设置新的堆栈的指针,那么堆栈大小就是用户分配的大小。
在函数返回时要恢复堆栈指针,没有恢复之前,不能产生未处理异常。

不过几乎没有代码。手动设置堆栈指针。
这样堆栈的大小是固定的,不过提交的页面是可以动态增加的。

堆栈默认大小,可以在编译时设置,也有预编译指令可以设置,设置的大小也是固定的。





[解决办法]
动态增大栈?没听过,一般都是在事先设置好的。一般没必要用那么大的栈吧,除非递归什么的。不过递归也不建议调大栈空间吧。
动态分配(堆)要说极限的话,逻辑上的问题一般,都是有操作系统来处理的,不一定有多少空间就一定会分配,比如有内存碎片什么的导致空间浪费,硬件上的话,主要还是硬件本身能提供多少的问题吧。
[解决办法]
有操作系统支持栈的自动增长的。
平坦模式的os可能有点困难;段模式的os应该比较容易实现。
[解决办法]
通常需要很大栈空间的行为属于设计错误。
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

栈在物理内存中是连续的吗?

对于一些程序,都是讲线性空间。

所谓的线性空间可以理解成虚拟内存吗?

不可以,对于32位系统,你的进程启动后,OS会给你的进程分配4G的线性空间,与其他的进程是独立开来的。当你的程序用到线性地址中的某块,操作系统才会将真实的物理内存映射到线性空间,所以当在程序了使用连续的地址,实际上用的是线性地址。操作系统可能将不连续的物理内存映射到进程中连续的线性地址中。对于程序来说感应不到真实的物理的地址是否连续了。

热点排行
Bad Request.