进程用尽堆栈区间
本帖最后由 fireaway7 于 2014-05-11 13:57 编辑学习到《Linux内核源代码情景分析》第2.5节,假设情景:进程在运行过程中,已经用尽了为本进程分配的堆栈区间,%esp指到了堆栈区间的最底部。
内核在创建新的进程时,是按什么标准来为它确定配堆栈区间初始大小的,什么时候会用完?“堆栈”两个字老是出现在一起,实际上它仅仅是指栈吧,malloc()分配得到的地址,应该在图的哪块区间呀?
+----+--------
|||||||||||||系统空间
|--------------
| 堆栈区间 |
%esp->|-----
| 空 洞| 用户空间
|-----
| 数据和 |
| 代码区间 |
+----+-------- 用户空间的空洞 噢,那应该从空洞的底部往上吗,那怎么判断它有没有和堆栈“碰撞”?
回复 1# fireaway7
希望这篇文章可以帮到你
http://blog.chinaunix.net/uid-23069658-id-3959636.html
非常感谢,现在又想起来一个问题,物理内存不够时,可以交换到磁盘,反而虚拟空间“可伸缩”的就只有free那块区间了,stack、brk,当两者“碰撞”时,再想扩展堆栈区间或malloc()都将失败,但往往有一些大型程序内存消耗需要在3G以上,32位系统就不能执行这个程序了吧,必须64位系统吧?
个人意淫:物理空间想像成银行可运转的钱,32位系统虚拟空间3G上限想像成可贷款金额的上限,银行有方法“挖东墙补西墙”,这个人不用这笔钱时再贷给那个人,感觉每个人都能贷到这笔钱一样(只是可能会等待一下),感觉银行把这笔钱“突破”到不止这麽多钱了,很奇妙,但是由于一些政策的原因,单次贷款金额必须有上限,就相当于虚拟空间3G,这个反而是一个“突破”不了。
页:
[1]