Chinaunix首页 | 论坛 | 博客
  • 博客访问: 351107
  • 博文数量: 161
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 345
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-13 11:04
文章分类

全部博文(161)

文章存档

2015年(15)

2014年(144)

2013年(2)

我的朋友

分类: 架构设计与优化

2014-10-27 16:08:06

原文地址:深入理解malloc 作者:shenyanxxxy

Tips: getrlimit 可以得到某个程序的有关stack,DATA segment等信息。默认的stack size为8MB。DATA segment大小为-1,说明没有界限。
我的机器:8GB内存,16GB swap。

我通过测试发现:当malloc申请的内存<24GB的时候,malloc可以申请成功,当申请的内存大于24GB的时候,malloc返回null,说明malloc是从虚拟存储器中申请内存,他的空间大小为虚拟存储器的空间大小,该进程所使用的内存大小为95.1%的总内存大小,当继续申请的时候,会将数据交换到swap上。但是系统不能无休止的替换页面到swap,如果到了swap的最大值,系统就会kill掉占用内存较多的线程。

malloc的底层是通过brk系统调用扩大堆的空间。

而在进程的地址空间中,有一部分是使用mmap的,这个mmap是与page_cache有着非常紧密的关系的,也就是一一对应的关系,直接操作mmap上的数据,就是修改对应的文件。

在堆空间与栈空间之间有一部分是链接了.so等等共享链接库的,这些.so就是通过mmap的方式映射到用户的地址空间的。通过strace可以看出,这些共享库也是以page cache的形式在内存中只存储了一份,各个进程都是通过此种方式映射到page cache中,从而节省了内存的使用。
阅读(968) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~