gpt4 book ai didi

java - C++ 和 Java 性能

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:12 26 4
gpt4 key购买 nike

这个问题只是推测。

我在 C++ 中有以下实现:

using namespace std;

void testvector(int x)
{
vector<string> v;
char aux[20];
int a = x * 2000;
int z = a + 2000;
string s("X-");
for (int i = a; i < z; i++)
{
sprintf(aux, "%d", i);
v.push_back(s + aux);
}
}

int main()
{
for (int i = 0; i < 10000; i++)
{
if (i % 1000 == 0) cout << i << endl;
testvector(i);
}
}

在我的盒子里,这个程序大约在 . 12秒;令人惊奇的是,我在 Java 中有一个类似的实现 [使用 String 和 ArrayList],而且它的运行速度比我的 C++ 应用程序快得多(大约 2 秒)。

我知道 Java HotSpot 在转换为 native 时执行了很多优化,但我认为如果这种性能可以在 Java 中完成,它也可以在 C++ 中实现...

那么,您认为应该在上面的程序中修改什么,或者,我不知道,在使用的库或内存分配器中修改什么以达到类似的性能? (编写这些东西的实际代码可能会很长,所以,讨论一下会很好)...

谢谢。

最佳答案

您必须谨慎进行性能测试,因为很容易欺骗自己或不进行同类比较。

但是,我看到了将 C# 与 C++ 进行比较的类似结果,并且有许多著名的博客文章讲述了本地编码人员在面对此类证据时的震惊。基本上,一个优秀的现代分代压缩 GC 针对大量小分配进行了非常优化。

在 C++ 的默认分配器中,每个 block 都被同等对待,因此分配和释放的平均成本很高。在分代 GC 中,所有 block 的分配成本都非常非常低(几乎与堆栈分配一样便宜),如果它们的生命周期很短,那么清理它们的成本也非常低。

这就是为什么与更现代的语言相比,C++ 的“快速性能”在很大程度上是虚构的。您必须手动调优您的 C++ 程序,使其无法识别,然后才能与等效的天真编写的 C# 或 Java 程序的性能相抗衡。

关于java - C++ 和 Java 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1550910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com