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

时间:2018-03-18 17:19:57

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

我正在C ++ Builder 6 Enterprise中编写应用程序。

软件允许我保留的最大内存大约是870 MB,不多了。系统上可用的物理内存为8 GB,PC运行的是Windows 7。

执行内存分配语句(如malloc(870000000))后,任务管理器会立即说明整个系统使用的内存为2.5 GB。

我的问题是,为什么我不能分配到可用内存的结尾?

1 个答案:

答案 0 :(得分:1)

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 连续< / em>内存块,在非平凡的应用程序中可能会失败。

即使该应用程序是大地址识别,这将使可访问内存在32位Windows上仅增加3GB(仅在Windows启动时启用/3GB标志),并且在64位Windows上启用4GB。

因此,您永远无法在接近完整8GB的任何地方分配32位应用程序。你需要一个64位的应用程序。