c++ - C++Builder 6 中的最大内存分配

标签 c++ malloc c++builder-6

我正在使用 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/

相关文章:

python - 如何在运行时覆盖 C 函数(如 LD_PRELOAD)?

c++ - 为底层容器不存储真实对象的迭代器重载 operator->

c++ - 具有(读/写)-only 内存顺序的内存排序或读-修改-写操作

c - 关于malloc和free中的线程安全

c++ - OnShow 事件上的 ProcessMessages c++ builder

c++ - Brainfuck 解释器奇怪的输出

c++ - KeyboardProc 返回 TRUE 会导致性能下降

c - 函数中的 malloc — 段错误

c - calloc 是否将整个分配归零?

c++ - 删除动态创建的控件 borland 6 c++ builder