Linux 内存的延迟分配

Linux 内存的延迟分配

 

Linux内存的延迟分配就是在你未使用内存(均值物理内存)的时候,操作系统是不会真正的分配物理内存的,

比如

 

int *p = (int*)malloc(1024 * 1024)

 

如果接下来你没有访问p所指向的内存,那么你会看到进程占用的内存是不是包括这1M空间的。

上面这句话是对的,但是还不够清楚,接下来的问题是,如果我开始使用内存,则会占用多少空间?

比如我又写下了这样的代码:

 

 *p = 4;
 cout << *p << endl;

 

这时候进程占用的内存是多少?我之前一直以为会是1M,但是实际上该处占用的内存少于1K。

这里的原因我认为是OS分配物理内存的是以页为单位的,所以,只有某一页上的内存被访问,则该页才会被实际的映射到物理内存上来,也即开始占用物理内存。

不仅malloc,mmap也是类似的表现。

观察进程内存访问:pid=`ps aux | grep 进程名 | grep -v grep | awk -F" " '{print $2}'`; top -p $pid

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值