【问题标题】:Does initializing arrays have a significant effect on C++ performance?初始化数组对 C++ 性能有显着影响吗?
【发布时间】:2021-05-16 02:03:27
【问题描述】:

我正在尝试将 4000 多行的遗留 C++ 代码块分解为单独的函数。在函数的开头,声明了很多 char 数组。相同的数组以完全不同的方式用作数据的缓冲区,例如:

char array[4];
strcpy(array, "foo");
//something with foo
strcpy(array, "bar");
//something with bar

我想把这些分成

void foo() {
    char foo[4];
    strcpy(foo, "foo");
    //something with foo
}

void bar() {
    char bar[4];
    strcpy(bar, "bar");
    //something with bar
}

但是性能在这里很重要,我想知道初始化更多的数组是否可能会对速度产生负面影响。 (显然我不会粘贴 4000 行代码)。

【问题讨论】:

  • Profile your application 并找出答案。
  • 那不是“遗留 C++”,那是 C。你需要它来保持 C,如果不需要,你有没有测量过一个普通的 std::string 不够快?
  • 创建不同的数组可能不会损失任何性能,因为这些是堆栈上的静态数组,其分配只是增加堆栈指针。但是如果这些函数没有被内联,你现在就必须支付调用函数的成本。
  • @Quentin 也是 C++。很多代码在两种语言中都有效
  • 关于 profiling 的评论确实是最好的建议。看来您的示例是人为的。我非常怀疑缓冲区是 4 个字节,而且您还没有描述“某事”。由于缓存性能考虑,可能是共享缓冲区。如果您分析原始代码并分析您的更改,您会发现是否存在差异。

标签: c++ arrays c performance memory


【解决方案1】:

初始化数组对 C++ 性能有显着影响吗?

无法做出适用于所有程序的普遍概括。但在小数组的情况下:初始化很少有很大的成本。您可以通过衡量来发现成本在您的计划中是否显着。

默认初始化一个普通对象数组 - 例如在您的示例中 - (通常)根本没有开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2011-06-12
    • 2011-11-12
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    相关资源
    最近更新 更多