Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1857252
  • 博文数量: 211
  • 博客积分: 464
  • 博客等级: 下士
  • 技术积分: 3794
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 18:25
个人简介

阿弥陀佛

文章分类

全部博文(211)

文章存档

2020年(2)

2019年(3)

2018年(5)

2017年(6)

2016年(10)

2015年(9)

2014年(73)

2013年(90)

2012年(13)

分类: 架构设计与优化

2014-10-23 11:12:42

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中,从而节省了内存的使用。
阅读(1661) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~