【发布时间】:2012-04-04 19:46:35
【问题描述】:
我遇到了一个奇怪的问题,我的进程分配的空间似乎略低于 1 GiB。当我的软件给出bad_alloc 异常时,Windows 任务管理器“内存使用”列显示接近 1 GiB 的值。是的,我检查过传递给内存分配的值是否合理。 (不存在会导致失败的竞争条件/损坏)。是的,我需要所有这些记忆,而且没有办法绕过它。 (它是图像的缓冲区,无法进一步压缩)
我不是想一次性分配整个 1 GiB 内存,有几个分配大约 300 MiB。这会导致问题吗? (我会尝试看看是否进行更小的分配会更好)。是否有一些编译器开关或其他我必须设置的东西才能超过 1 GiB?我看到其他人抱怨 2 GiB 的限制,这对我来说很好.. 我只需要多一点:)。我正在使用带有 SP1 的 VS 2005,我在 32 位 XP 上运行它,它是 C++ 语言。
【问题讨论】:
-
我能想到的两件事,较小的分配,请让嵌入式系统领域之外的 32 位操作系统尽快消亡。而且由于公司政策,我被困在 32 位 Windows 7 上,可用 4 GB 内存中的 2.8 个,这就是我希望它及时消亡的原因。
-
我深受 32 位操作系统的限制,这让我深感悲痛。这只是我现在必须忍受的事情。
-
SysInternals 有一些工具可以帮助您检查内存碎片。如果您在应用程序开始时分配 1 GB 会发生什么?
-
我会检查一下 SysInternals 工具,有什么提示吗?我不会一次性分配 1 GiB。有多个分配,每个分配大约 300 MiB。我接近 1 GiB 没有任何问题。
-
显而易见的尝试是更小的分配,例如每个 1 MB。如果它们有效,您将遇到碎片问题。就试一试吧。如果它们不起作用,那将是一个有用的事实,可以添加到您的问题中。
标签: c++ windows visual-studio memory memory-management