c++ - new[] 是否保留不可见存储? C++ 动态内存分配

标签 c++ dynamic-memory-allocation

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

char* p1 = new char[1073741824];

这是否会保留一些未使用任务管理器或资源监视器显示的额外存储空间?

使用 visual studio 2017 Windows 10。

最佳答案

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

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

关于c++ - new[] 是否保留不可见存储? C++ 动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49802092/

相关文章:

c++ - 操作动态内存,重载一个const成员函数有意义吗?

c - 为什么大小为 '0' 的 realloc 允许多次释放指针,但大小为 '0' 的 malloc 不允许?

c++ - 注册每个 C/C++ 源文件以创建已用源的运行时列表

c++ - 如何在 C++ 中编写缓存友好的多态代码?

c - 动态数组的可变参数函数?

c++ - 动态内存分配输出

c++ - 异步竞争条件或错误?

c# - 托管 C++ 中奇怪的 GetLastError 返回

c++ - 其他线程位置

c - 从动态结构数组中删除元素时出现未定义的行为