在C / C ++中分配内存失败

时间:2012-04-29 07:56:19

标签: c++ c

我有一个包含共享库的算法的C实现。共享库的性能在C和C ++中有很大不同(在C ++中表现更好)。因此,我已将C实现的共享库部分( Imp-1 )更改为C ++( Imp-2 ),同时保持其余部分相同。我分别在Linux中使用gcc和g ++编译了 Imp-1 Imp-2 。在小型问题中, Imp-1 Imp-2 的表现完全相同。但是,在同样大的问题中,当 Imp-1 解决它没有任何问题时, Imp-2 会返回 std :: bad_alloc 错误。有趣的是,当内存使用量增加到4GB(可用内存为35GB)时会发生此错误。

为什么会出现此错误? (编译器,操作系统,编译器选项等)

最诚挚的问候。

1 个答案:

答案 0 :(得分:1)

似乎你的gcc是64位编译器,而g ++是一个32位编译器。即使您在32位系统上运行,除非使用64位编译器编译程序,否则您的程序无法充分利用64位寻址功能,如果您想要处理超过4GB的容量,则会导致出现bad_alloc。

我确信您在64位上运行32位编译程序的原因是4GB限制。一般来说,内存被分为User / Kernal Space,在32位系统上,整个4GB不可用,通常在2GB到3GB之间。正如您可以解决整个4GB问题,您似乎在64位环境中运行32位程序。