【发布时间】: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