允许32位应用程序在FreeBSD下使用超过4GB的ram

时间:2016-06-25 20:59:06

标签: c++ clang freebsd clang++

我目前正在FreeBSD下开发游戏。我正在使用clang作为32位二进制文​​件进行编译,并在64位系统下运行(在此系统下我有32GB的RAM),但我需要使用超过4GB的RAM,因为它只使用4GB。
即使我运行多个游戏实例,它也无法访问超过4GB的RAM。

另外,我试图在64位系统下编译它,但它有一个奇怪的行为。我收到了很多错误。

我知道Windows上的Visual Studio有一个选项/LARGEADDRESSAWARE,或类似的东西让32位应用程序能够使用更多内存,或者我错了?
有没有我可以指定的标志(比如Windows一样)让我的二进制文件能够使用更多的RAM?我读过有关mcmodel=large(或medium)的内容,但我不确定这是我正在寻找的内容。
交叉编译怎么样?有谁知道我在哪里可以找到一些有关它的好信息? 谢谢。

2 个答案:

答案 0 :(得分:4)

您只能使用32位整数寻址4GiB。 2 ^ 32 = 4294967296 = 4 * 1024 * 1024 * 1024

在32位可执行文件中,没有办法获得超过4GiB的地址空间。这是一个数学限制。不可否认,您可以使用交换和物理地址扩展来处理一个进程中超过4GiB的数据,但在任何给定时间您都不能超过4GiB。

答案 1 :(得分:0)

要使用4GB以上的RAM,需要64位版本的FreeBSD。这基本上意味着“amd64”而不是“i386”架构。您可以在64位系统下运行32位二进制文​​件,这将使多个实例可以使用超过4GB的RAM;显然,单个人不能解决更多问题。