免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chenzhanyiczy
打印 上一主题 下一主题

[复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
11 [报告]
发表于 2010-03-18 10:09 |只看该作者
应用态的C程序,通常调用函数返回之后,只是将ESP进行调整。至于栈对应的内存空间,并未立即回收。通常整个主程序退出的时候,会进行处理的。其实这个地方那个,你更需要关注的时候,函数调用返回之后,主程序不要再访问被调用函数的栈空间,访问的结果是未定义的。

论坛徽章:
0
12 [报告]
发表于 2010-03-18 10:31 |只看该作者
应用态的C程序,通常调用函数返回之后,只是将ESP进行调整。至于栈对应的内存空间,并未立即回收。通常整个 ...
Godbach 发表于 2010-03-18 10:09



嗯,版主说的比较清楚啦。
    栈的虚拟地址空间是进程产生时产生的,每个函数运行时在栈上占用掉一块的空间,有人叫stack frame,
函数运行完毕后这块被占用的栈,被调用者或者自身清除掉,也就是修改一下ESP中的数而已。
在使用虚拟地址空间时,分配到的内存页会在进程结束的时候被释放。没有垃圾回收。

论坛徽章:
0
13 [报告]
发表于 2010-03-18 10:45 |只看该作者
stack应该也不是一直会被缺页异常无穷的分配下去。用ulimit -a可以看到每个进程都有个stack size的限制,当 ...
snail_314 发表于 2010-03-18 09:58



   是的,绝大部分资源分配都是有个限制的。写个无限递归导致栈溢出,就是虚拟地址空间的溢出,非物理内存分配的溢出。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
14 [报告]
发表于 2010-03-18 11:08 |只看该作者
LZ,你的问题是不是这样的:
LINUX 用户态的栈是可以动态增长的,那么如果只是增长的话,会浪费一些空间,你 ...
accessory 发表于 2010-03-18 01:45



大概是这意思,这里加个条件---假如栈没有限制的情况下(即stack_size为无限制)

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
15 [报告]
发表于 2010-03-18 11:08 |只看该作者
stack应该也不是一直会被缺页异常无穷的分配下去。用ulimit -a可以看到每个进程都有个stack size的限制,当 ...
snail_314 发表于 2010-03-18 09:58



如果stack size没有限制呢

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
16 [报告]
发表于 2010-03-18 11:10 |只看该作者
应用态的C程序,通常调用函数返回之后,只是将ESP进行调整。至于栈对应的内存空间,并未立即回收。通常整个 ...
Godbach 发表于 2010-03-18 10:09



这个我明白,但我的疑问是,栈对应的物理内存什么时候回收

论坛徽章:
0
17 [报告]
发表于 2010-03-18 11:13 |只看该作者
回复 14# chenzhanyiczy


    没试过。但应该会一直缺页异常下去,直到VM size超过2G, segment fault

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
18 [报告]
发表于 2010-03-18 11:13 |只看该作者
是的,绝大部分资源分配都是有个限制的。写个无限递归导致栈溢出,就是虚拟地址空间的溢出,非物理 ...
re_load 发表于 2010-03-18 10:45



如果stack size无限制的时候,假如进程不退出,那么进程栈 占用的物理内存不是很大?

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
19 [报告]
发表于 2010-03-18 11:14 |只看该作者
回复  chenzhanyiczy


    没试过。但应该会一直缺页异常下去,直到VM size超过2G, segment fault
snail_314 发表于 2010-03-18 11:13



2G?不是3G吗?

论坛徽章:
0
20 [报告]
发表于 2010-03-18 11:15 |只看该作者
回复 15# chenzhanyiczy


    栈对应的物理内存和你这个进程其他所有的物理内存一样,都是被OS虚拟内存管理器所管理,都纳入swap机制中。和.data, .code没任何区别
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP