gpt4 book ai didi

c++ - 在合适的情况下编写索引是否比仅从 c++ 中的性能 POV 的 for 循环更好?

转载 作者:行者123 更新时间:2023-11-28 01:14:05 26 4
gpt4 key购买 nike

注意:此问题仅旨在从性能的角度检查代码,而不是可读性和可扩展性。他们说“过早的优化是万恶之源”,而在我使用的示例中,潜在的性能优势可以忽略不计。我只是想知道编译器优化是否会导致计算机最终执行命令,就像我通过仅使用索引而不使用 for 循环手动编写的命令一样。

好吧,我有一个非常简单的算法,它会从用户那里接收一个固定大小为 10 的数组和一个数字 n,然后它会打印出 的出现次数n 在给定的数组中。算法是这样的

int a[10] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
cin >> a[0] >> a[1] >> a[2] >> a[3] >> a[4] >> a[5] >> a[6] >> a[7] >> a[8] >> a[9];
int number;
cin >> number;
int counter = 0;
for (int i = 0; i < 10; i++)
{
if (number == a[i]) {
counter += 1;
}
}
cout << counter << endl;

我正在和某人交谈是否转换线路cin >> a[0] >> a[1] >> a[2] >> a[3] >> a[4] >> a[5] >> a[6] >> a[ 7] >> a[8] >> a[9]; 像这样的 for 循环

for (int i = 0; i < 10; i++)
{
cin >> a[i];
}

会对性能产生负面影响(仅性能,而不是可读性等)。我的假设是,在 for 循环中,我们正在创建一个变量 i(然后修改它等),它对表现。我的假设是真的吗?它取决于编译器吗?我可以使用时间基准来比较两者,但算法的运行时间在我的机器上会很短(大约 300 纳秒),我认为它在很大程度上取决于算法本身以外的因素(例如可用内存等) .对于这种情况,理想的基准测试程序是什么?

最佳答案

在代码已经运行后,您正在考虑如何让代码变得更好更快,这是一件非常好的事情。我为此为你鼓掌——我希望我的一些同事更经常这样做 :p

但是,在编程世界中有一条硬性规定:

Readability/maintainability trumps all.

我不在乎您的代码和算法有多快多酷。如果我不能阅读和使用它,那对我来说毫无意义。更不用说——如果您 3 个月不碰它(这在生产代码中是一小段时间),您回来时会完全不知道自己做了什么。

综上所述,我很高兴看到你试图让你的代码更快,但你试图这样做的方式是强制程序员写出 10 个不同的语句,而他们只能写一个一个循环。规范发生了什么变化,现在您需要接受 100 个输入? 1000?这是现实世界中经常发生的事情!

此代码不可维护或可扩展。

因此,即使您可以通过自己展开循环来稍微更快(这实际上可能不是真的,因为现代编译器会为您做这些),我仍然会说不要不要这样做!即使这对您的运行时性能有轻微影响,它也会对 future 的开发人员性能产生更大的负面影响,最终会影响运行时性能。

关于c++ - 在合适的情况下编写索引是否比仅从 c++ 中的性能 POV 的 for 循环更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59274847/

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