我对Windows和Linux如何通过C++程序进行内存管理感到很好奇。
好奇的原因是因为我刚刚制作了3个非常简单的C++程序,可在Linux和Windows之间移植。代码完全一样。硬件也一样。但是结果却截然不同!两次测试均重复10次,然后计算算术平均值。
我已经在整数的静态数组,类 vector 和堆栈(带有指针)上测试了顺序插入。插入总数为10 ^ 6。
Windows XP SP2 x86结果:
静态整数数组:56毫秒
类 vector :686毫秒
堆栈(带指针):2193 ms
Slackware 11 x86结果:
静态整数数组:100毫秒
类 vector :476毫秒
堆栈(带指针):505毫秒
Windows和Slax上的堆栈插入时间之间的速度差异令人印象深刻。这些结果看似正常吗?两种代码都是使用G++(在Windows上为Mingw32-g++)编译的。
使用的计算机是具有4GB RAM的Dual Core 3.2Ghz,在进行测试时,有超过2GB的可用RAM。
最佳答案
这可能与C++ stdlib的实现(Microsoft MSVC与GNU libc/stdc++)的关系比内存管理更多。
C++设置了规范,但实现方式差异很大。
更新:现在我注意到您在两个平台上都使用了g++-嗯,它仍然是不同的实现。而且GNU代码是为Unix环境开发的,后来又移植到Windows上-因此,它可能会做出对Windows环境不正确的假设和优化。
但是您最初的问题是有效的。它可能与操作系统的底层内存模型有关-但是您在这里的测试过于粗糙,无法得出任何结论。
如果您运行更多测试,或尝试使用其他标志/编译器,请发布一些更新的统计信息,它们将为您提供丰富的信息。