新的[]重新开发隐形存储吗? c ++动态内存分配

时间:2018-04-12 16:52:01

标签: c++ dynamic-memory-allocation

所以我注意到有些奇怪的东西。我为我的程序预留了4 GB的物理内存。我已经分配了2 GiB的存储空间,我尝试使用下面的代码添加1 GiB。程序然后抛出一个错误的分配说内存已满。所以我想知道我是否使用。

分配1 GiB
char* p1 = new char[1073741824];

这是否会重新使用任务管理器或资源监视器未显示的其他存储?

使用Visual Studio 2017 Windows 10。

1 个答案:

答案 0 :(得分:1)

与分配相关的一些开销,但这相当小 - 正如@zzxyz所说,你的问题可能是内存碎片。总共可能有大约2GB的内存,但可能没有1GB的连续的内存(这是你明确要求的)。

您为其分配存储空间的任何对象都需要为其成员提供连续存储。 new[]为对象的连续数组请求内存,因此整个存储块需要是连续的 - 这是C ++为您提供的非常有用的保证。如果您使用new分配每个单独的对象,那么每个对象的存储只需要是连续的,然后所有对象可以分散在每个自己的小连续块中的内存中。请注意new[]new