[英]Failure on allocating memory in 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)时,会发生此错误。
为什么会出现此错误? (编译器,操作系统,编译器选项等)
最好的祝福。
看来您的gcc是64位编译器,而g ++是32位编译器。 即使您在32位系统上运行,除非您使用64位编译器编译程序,否则您的程序将无法充分利用64位寻址功能,如果您要寻址的内存超过4GB,这将导致bad_alloc。
我确信您在64位上运行32位编译程序的原因是4GB的限制。 一般而言,内存按用户/内核空间划分,在32位系统上,整个4GB不可用,通常在2GB至3GB之间。 正如您可以寻址到整个4GB内存一样,您似乎正在64位环境中运行32位程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.