32/64位Windows / Linux应用程序

时间:2016-11-23 15:50:11

标签: c++ linux windows boost 32bit-64bit

我编写了一个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的整数矩阵,我告诉自己我可能超过了32位平台上允许的大小......

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

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

1 个答案:

答案 0 :(得分:6)

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

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