【发布时间】:2018-04-13 02:15:49
【问题描述】:
所以我注意到了一些奇怪的事情。我为我的程序留出了 4 GB 的物理内存。我已经分配了 2 GiB 的存储空间,我尝试使用下面的代码添加 1 GiB。然后程序抛出一个错误的分配,说内存已满。所以我想知道我是否分配了 1 GiB 使用。
char* p1 = new char[1073741824];
这是否会保留一些未使用任务管理器或资源监视器显示的额外存储空间?
使用 Visual Studio 2017 Windows 10。
【问题讨论】:
-
发生这种情况的原因是您需要连续 1GB 内存。可能,您剩余的 2GB 相当分散。
-
“为什么我的巨大分配失败?”有很多重复。 Here is one.
-
如果这是一个实际的实际考虑,顺便说一下,
VirtualAllocEx可以让您对分配进行更细粒度的控制,并且在new失败的情况下可能会成功。 -
@zzxyz 但是您的代码不再可移植到其他平台 - 这是一种耻辱。
-
@JesperJuhl - 我已经开发了几个实际上需要分配大量内存(4-8GB)的应用程序,此时几乎需要一个操作系统抽象层(每个平台的特定代码)。在 1GB 时,可能还有另一个解决方案。
标签: c++ dynamic-memory-allocation