我正在玩,了解可以分配多少内存.最初我认为可以分配的最大内存等于物理内存(RAM).我通过运行命令检查了Ubuntu 12.04上的RAM,如下所示:
~$ free -b
total used free shared buffers cached
Mem: 3170848768 2526740480 644108288 0 265547776 1360060416
-/+ buffers/cache: 901132288 2269716480
Swap: 2428497920 0 2428497920
Run Code Online (Sandbox Code Playgroud)
如上所示,总物理内存为3Gig(3170848768字节),其中只有644108288字节是空闲的,所以我假设我最多只能分配这么多内存.我通过编写下面只有两行的小程序来测试它:
char * p1 = new char[644108290] ;
delete p1;
Run Code Online (Sandbox Code Playgroud)
由于代码运行完美,这意味着它成功分配了内存.此外,我尝试分配的内存大于可用的物理空闲内存,但它没有抛出任何错误.然后每个问题
我认为它必须使用虚拟内存.所以我测试了免费交换内存的代码,它也工作.
char * p1 = new char[2428497920] ;
delete p1;
Run Code Online (Sandbox Code Playgroud)
我试图分配免费交换加上可用RAM字节的内存
char * p1 = new char[3072606208] ;
delete p1;
Run Code Online (Sandbox Code Playgroud)
但是这次代码失败了抛出bad_alloc异常.为什么代码这次不起作用.
现在我在编译时在新程序中分配了内存,如下所示:
char p[3072606208] ;
char p2[4072606208] ;
char p3[5072606208];
cout<<"Size of array p = " <<sizeof p <<endl;
cout<<"Size …Run Code Online (Sandbox Code Playgroud)