相关疑难解决方法(0)

可以在c ++中动态分配并在编译时分配的最大内存

我正在玩,了解可以分配多少内存.最初我认为可以分配的最大内存等于物理内存(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)

由于代码运行完美,这意味着它成功分配了内存.此外,我尝试分配的内存大于可用的物理空闲内存,但它没有抛出任何错误.然后每个问题

malloc可以分配的最大内存

我认为它必须使用虚拟内存.所以我测试了免费交换内存的代码,它也工作.

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)

c++ ubuntu memory-management new-operator

8
推荐指数
1
解决办法
9092
查看次数

标签 统计

c++ ×1

memory-management ×1

new-operator ×1

ubuntu ×1