我有一个 x64 应用程序。这是一个有点繁重的应用程序(在线程数、所需内存等方面)。我在 4GB RAM 64 位 Windows7 四核机器上运行此应用程序。但我注意到的是,在我的应用程序占用大约 2.2-2.3 GB 内存后它崩溃了。这是必需的行为吗?最大 64 位应用程序能否从 4GB RAM 中仅占用 2.3-2.4 GB RAM?
问问题
1230 次
3 回答
1
RAM 的数量无关紧要,进程分配虚拟内存。您可以在 64 位进程中分配的虚拟内存量仅受操作系统提供将虚拟内存映射到 RAM 的页面的能力的限制。假设您没有使用 CreateFileMapping() 创建自己的映射,这通常仅受允许的最大分页文件的限制。这是一个系统设置,控制面板+系统+高级。Windows 版本也有上限,Windows 7 Home Premium 为 16 GB,Professional 及更高版本为 192 GB。
仅当您的程序实际访问虚拟内存时才使用 RAM。当内存尚未映射时,会产生页面错误。如果您在消耗所有可用页面之前分配和使用的内存远远超出 RAM 的数量,则 64 位进程通常会由于这些页面错误而减速到爬网。
由于您远远低于典型的最大页面文件大小,这肯定只是另一个普通的旧堆损坏错误。
于 2012-07-02T13:58:51.270 回答
1
不,首先检查您没有任何溢出或其他错误。即使是 32 位应用程序也可以寻址 - 使用更多 RAM,因此如果它仅限于 64 位 Windows 将是荒谬的。
剩余的内存可以免费使用,对吧?
于 2012-07-02T13:40:44.920 回答
0
调试你的程序。崩溃不应该仅仅因为你分配了很多内存而发生。通常的嫌疑人:数学溢出、内存损坏、未能处理来自内存分配例程的错误。
于 2012-07-02T13:49:26.373 回答