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

C++ 允许32位应用程序在FreeBSD下使用超过4GB的ram,c++,clang,freebsd,clang++,C++,Clang,Freebsd,Clang++,我目前正在FreeBSD下开发一个游戏。我使用clang将其编译为32位二进制文件,并在64位系统下运行(我在这个系统下有32GB的RAM),但我需要从中使用超过4GB的RAM,因为它只使用4GB。 即使我运行多个游戏实例,它也不能访问超过4GB的RAM 另外,我尝试在64位系统下编译它,但它有一个奇怪的行为。我有很多虫子 我知道Windows上的Visual Studio有一个选项/largeAddressware,或者类似的选项,使32位应用程序能够使用更多RAM,否则我错了? 是否有任何标

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


另外,我尝试在64位系统下编译它,但它有一个奇怪的行为。我有很多虫子

我知道Windows上的Visual Studio有一个选项
/largeAddressware
,或者类似的选项,使32位应用程序能够使用更多RAM,否则我错了?
是否有任何标志,我可以指定(如Windows之一),使我的二进制能够使用更多的RAM?我读过一些关于
mcmodel=large
(或
medium
)的文章,但我不确定这就是我要找的。
交叉编译怎么样?有人知道我在哪里可以找到关于它的好信息吗?

谢谢。

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


32位可执行文件中的地址空间不可能超过4GB。这是数学上的限制。诚然,您可以使用交换和物理地址扩展来处理进程中超过4GiB的数据,但在任何给定时间,您都不能处理超过4GiB的数据。

您只能使用32位整数来处理4GiB。2^32=4294967296=4*1024*1024*1024


32位可执行文件中的地址空间不可能超过4GB。这是数学上的限制。诚然,您可以使用交换和物理地址扩展来处理进程中超过4GB的数据,但在任何给定时间,您都不能处理超过4GB的数据。

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

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

PAE只与内核模式相关。等效的用户模式类似于
mmap
。无论哪种方式,寻址超过2^32字节的唯一方法是交换(或“bank”)部分地址空间。@Rhymoid:事实上,PAE只适用于内核模式,但我希望尽可能保留答案和常规。32位意味着4 GiB的地址空间,仅此而已。PAE仅与内核模式相关。等效的用户模式类似于
mmap
。无论哪种方式,寻址超过2^32字节的唯一方法是交换(或“bank”)部分地址空间。@Rhymoid:事实上,PAE只适用于内核模式,但我希望尽可能保留答案和常规。32位意味着4 GiB的地址空间,仅此而已。“此外,我曾尝试在64位系统下编译它,但它有一个奇怪的行为。我得到了很多错误。”--那么你会想修复这些错误。如果你有自己无法解决的具体问题,这可能是一个好问题。这同样适用于Windows:
/largeAddressWare
也不允许您的应用程序地址超过4GB。请查看内存映射文件。“此外,我尝试在64位系统下编译它,但它有一个奇怪的行为。我遇到了很多错误。”--然后您会想修复这些错误。如果你有自己无法解决的具体问题,这可能是一个好问题。这同样适用于Windows:
/largeaddressware
也不允许您的应用程序地址超过4GB。查看内存映射文件。正如我指定的,我在一个专用服务器上运行它,该服务器有32GB的RAM和FreeBSD x64,使用30个实例,但我总是有超过26GB的可用RAM。另外,我有一个mysql服务器,它使用RAM。我认为它应该使用更多的内存,应该。你能粘贴实际的统计数据吗?正如我指定的,我在一个有32GB内存和FreeBSD x64的专用服务器上运行它,使用了30个实例,但我总是有超过26GB的空闲内存。另外,我有一个mysql服务器,它使用RAM。我认为它应该使用更多的内存,应该。你能粘贴实际数据吗?