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

标签 c++ c

我有一个包含共享库的算法的 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 错误。有趣的是,当内存使用量增加到 4GB 而可用内存为 35GB 时,会发生此错误。

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

最好的问候。

最佳答案

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

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

关于c++ - 在 C/C++ 中分配内存失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10370596/

相关文章:

c# - 具有自定义结构的 PInvoke 访问冲突异常

c++ - 使用 boost 几何检查两条线是否有交点

c++ - C++ STL vector 保留太多容量会消耗大量内存吗?

c - 确保只将指针传递给可变参数函数

c - 调试 ARM7 内存问题

c++ - 我如何在 Mac 上构建 gcc?

c++ - 如何从一组已定义的描述符中动态构建新的 protobuf?

c - 在编译时检测段错误

c - 将二维数组呈现为树

使用 `memmove` 循环移动数组