免费注册 查看新帖 |

Chinaunix

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

[复制链接]

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
21 [报告]
发表于 2010-03-18 11:24 |只看该作者
本帖最后由 chenzhanyiczy 于 2010-03-18 11:28 编辑

回复 19# snail_314


    是啊,都是被vma管理的
你的意思是不是这样:
这里假设某进程 没有堆,没有共享空间
.data =1M(VM size)
.code =1M(VM size)
那么栈能占用的 VM size大小为 3G-1M-1M

论坛徽章:
0
22 [报告]
发表于 2010-03-18 11:55 |只看该作者
如果stack size无限制的时候,假如进程不退出,那么进程栈 占用的物理内存不是很大?
chenzhanyiczy 发表于 2010-03-18 11:13



    linux内核没有物理内存的垃圾回收机制,swap可以看成回收吧。当然交换空间用完了,也就无法继续分配物理内存了。

论坛徽章:
0
23 [报告]
发表于 2010-03-18 12:05 |只看该作者
如果stack size无限制的时候,假如进程不退出,那么进程栈 占用的物理内存不是很大?
chenzhanyiczy 发表于 2010-03-18 11:13



    会很大的,如果开启了swap机制,其它进程要分配物理页时就会把已被占用的物理页交换出去,然后将该页重分给申请者。
如果这时swap空间用完了,你的进程将会因为分配不到物理页而退出。
如果有很多进程频繁的交换出去而重新分配,系统性能会下降的很厉害,
最明显的体会是系统反应迟缓了,有GUI程序时体会最明显,界面都很难重新刷新,
最糟糕的情况是发生交换抖动,系统基本停止响应。

论坛徽章:
0
24 [报告]
发表于 2010-03-18 12:11 |只看该作者
如果stack size没有限制呢
chenzhanyiczy 发表于 2010-03-18 11:08



    上面说的是开启swap机制时的情况,如果没有开启swap机制,申请到多少物理页就使用多少物理页了,
如果其他进程再申请物理页,能分配则分配,不能分配将会因分配不到内存页退出。

论坛徽章:
0
25 [报告]
发表于 2010-03-18 12:19 |只看该作者
在不开启swap时,进程结束时回收。
在开始swap时,当其它进程申请物理页而没有足够的物理页时,通过swap机制,交换到磁盘上的方式回收。

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


    应该是。这是最大值。初始化时不可能分配这么大,是缺页异常动态分配的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
27 [报告]
发表于 2010-03-18 16:57 |只看该作者
当 函数调用, 栈顶指针 超过当前进程 已经 分配的page时, 发生缺页中断, 系统 为其分配一个物理页, 栈可以继续增长。

当 函数调用返回, 栈顶指针 缩回去 , 导致原来分配的页, 很长时间没有被读取时,   如果其它进程 发生缺页, 根据页面分配算法,
很长时间没有被读的栈页有可能被 直接分配给别的进程, 因为超过栈顶指针的页, 应该不算dirty页, 不用swap.


其实本质还是 页面分派算法,  如果一个页很长时间没有使用, 又没有有意义的数据, 接直接分派给别的需要的进程。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
28 [报告]
发表于 2010-03-18 18:02 |只看该作者
本帖最后由 chenzhanyiczy 于 2010-03-18 21:06 编辑

论坛徽章:
0
29 [报告]
发表于 2010-03-18 20:42 |只看该作者
物理内存应该在进程退出时回收吧

论坛徽章:
0
30 [报告]
发表于 2010-03-18 20:47 |只看该作者
问题来了,呵呵

环境:
Linux crmop 2.6.18-53.el5xen #1 SMP Wed Oct 10 17:06:12 EDT 2007 i686 athlo ...
chenzhanyiczy 发表于 2010-03-18 18:02



   晕,
  1.    printf("somewhere's value is %c\n",*(a+3024));
  2.    printf("somewhere's address is %p\n",a+3024);
复制代码
这两句是错误的。a+3024越界了。
  首先栈是向下增长的,你用a+3024,想搞溢出攻击吗,嘿嘿
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP