我有一个包括共享库的算法的C实现。在C和C++中,共享库的性能差别很大(在C++中性能要好得多)。因此,我将C实现(Imp-1)的共享库部分更改为C++ (Imp-2),同时保持其余部分不变。我分别用gcc和g++在Linux上编译了Imp-1和Imp-2 .在小型问题中,Imp-1和Imp-2的表现完全相同.然而,在相同的大问题中,Imp-1没有任何问题地解决了它,Imp-2返回std::bad_alloc错误。有趣的是,当可用内存为35 4GB时,当内存使用量增加到4GB时,就会发生此错误。
为什么会发生此错误?(编译器、操作系统、编译器选项等)
诚挚的问候。
发布于 2012-04-29 08:38:57
您的gcc似乎是一个64位编译器,因为g++是32位编译器。即使在32位系统上运行,除非使用64位编译器编译程序,否则程序也无法充分利用64位寻址功能,如果您想要寻址超过4GB,就会产生bad_alloc。
我确信您在64位上运行32位编译程序的原因是4GB限制。一般来说,内存被拆分为User/Kernal,在32位系统中,整个4GB是不可用的,通常在2GB到3GB之间。由于您可以处理整个4GB,看起来您正在64位环境上运行一个32位程序。
https://stackoverflow.com/questions/10370596
复制相似问题