我正在使用 C++Builder 6 Enterprise 编写应用程序。
该软件允许我预留的最大内存约为 870 MB,仅此而已。系统上可用的物理内存为 8 GB,PC 运行的是 Windows 7。
在执行内存分配语句(如 malloc(870000000)
)后,任务管理器立即显示整个系统使用的内存为 2.5 GB。
我的问题是,为什么我不能分配到可用内存的末尾?
最佳答案
C++Builder 6 于 2002 年发布,只能生成 32 位应用程序。 2012 年,C++Builder XE3 中添加了生成 64 位应用程序的能力。
无论如何,32 位应用最多不能访问超过 4GB 的内存。
用 C++Builder 6 编写的应用程序不支持大地址感知(并且手动将它们标记为大地址是不安全的,因为 RTL 和内存管理器与 LAA 不兼容),因此它们希望访问的内存最多最大为 2GB(另外 2GB 保留给 Windows 使用)。
当您要求 malloc()
分配大约 830 MB(不是 870 MB,这将是 912261120
而不是 870000000
),您要求它分配 1 个 连续 内存块,这在非平凡的应用程序中很可能会失败。
即使应用程序是 Large Address Aware,这也会在 32 位 Windows 上将可访问内存增加到仅 3GB(仅当在 Windows 启动时启用 /3GB
标志),而在 64 位 Windows 上为 4GB .
因此,您永远无法让 32 位应用程序分配接近完整 8GB 的任何空间。为此,您需要一个 64 位应用程序。
关于c++ - C++Builder 6 中的最大内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49350768/