32/64位Windows / Linux应用程序

我编写了一个C ++程序,它在编译为64位可执行文件时可以在Linux上正常工作。 我还将它编译为Windows上的32位可执行文件,并且崩溃时显示以下消息:

boost\boost_1_55_0\boost/test/minimal.hpp(123): exception "std::bad_alloc: bad allocation" caught in function: 'int __cdecl main(int,char *[])' 

因为我必须分配20000 * 20000大小的整数matrix,所以我告诉自己我可能已经超过了32位平台的允许大小。

所以我把它编译为一个64位的Windows可执行文件,它工作正常。 为了检查我的假设是否正确,我决定将它编译为32位Linux可执行文件,并且它也可以正常工作? 所以我不知道什么原因的崩溃可能是…

  • 32位Windows =>崩溃与标准bad_alloc
  • 64位Windows =>运行OK
  • 32位的Linux =>运行OK
  • 64位的Linux =>运行OK

32位Windows为您提供了不到2GB的地址空间,各种DLL,程序,堆栈以及您在其他地方分配的任何其他内存。 这有时意味着在一个连续的块中没有1.5GB的空间给你。

它在32位的Linux工作,因为我相信实际上为您提供了一个3GB的地址空间。 否则,它也遭受同样的问题。