2

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

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

最好的祝福。

4

1 回答 1

1

看来您的 gcc 是 64 位编译器,而 g++ 是 32 位编译器。即使您在 32 位系统上运行,除非您使用 64 位编译器编译程序,否则您的程序无法充分利用 64 位寻址功能,如果您想要寻址超过 4GB,这将导致您遇到的 bad_alloc。

我确信您在 64 位上运行 32 位编译程序的原因是 4GB 限制。一般来说,内存被划分为用户/内核空间,在 32 位系统上,整个 4GB 是不可用的,通常在 2GB 和 3GB 之间。由于您可以处理整个 4GB,因此您似乎正在 64 位环境中运行 32 位程序。

于 2012-04-29T08:38:57.067 回答