一个进程能用的最大内存(堆区)空间大小为1G


网上看到的分析:

32位意味着4G的寻址空间,linux把它分为两部分:最高的1G(虚拟地址从0xC0000000到0xffffffff)用做内核本身,成为“系统空间”,而较低的3G字节(从0x00000000到0xbffffff)用作各进程的“用户空间”。这样,理论上每个进程可以使用的用户空间都是3G。当然,实际的空间大小收到物理存储器大小的限制。虽然各个进程拥有其自己的3G用户空间,系统空间却由所有的进程共享。从具体进程的角度看,则每个进程都拥有4G的虚拟空间,较低的3G为自己的用户空间,最高的1G为所有进程以及内核共享的系统空间。


可是经自己测试:

堆区最多开2G - 1大小空间

栈区能开1G多,当接近2G就会报错


  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <cstdlib>  
  4. #include <string.h>  
  5. const long long MAXN = 1073741824;//2^30即1G  
  6. using namespace std;  
  7.   
  8. char s[MAXN * 2 - 1];//开2G内存,多1个都会编译错误(提示:整数溢出之类的错误)  
  9. int main()  
  10. {  
  11.     char t[MAXN + 1000];//之内开1G多的空间,2G会编译不通过  
  12.     memset(t, 0, sizeof(t));  
  13.     memset(s, 0, sizeof(s));  
  14.     return 0;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值