gpt4 book ai didi

c++ - 定义静态全局数组以避免在函数中定义它

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:43 24 4
gpt4 key购买 nike

我刚刚开始使用作者声称“高度优化”的代码块。在某些时候他们会这样做:

namespace somename 
{
static float array[N];
}

float Someclass::some_function(std::vector<float>& input)
{
// use somename::array in some way
return result;
}

作者没有将 somename::array 包含在类中,因为持久性代码存在问题(我们几乎无法控制)。当调用 some_function 时,该类对数组执行 O(N^2) 次操作。所以如果我在函数调用中移动 array

float Someclass::some_function(std::vector<float>& input) 
{
float array[N];
// use somename::array in some way
return result;
}

预期性能下降是否合理?换句话说,是否很明显,在许多不同的系统和编译器中,作者的优化(使用全局数组而不是函数内部数组)将有助于提高性能?

最佳答案

因为数字很重要:

./trial2.out 59.08s 用户 0.01s 系统 88% cpu 1:07.01 总计

./trial.out 59.40s 用户 0.00s 系统 99% cpu 59.556 总计

源代码:http://pastebin.com/YA2WpTSU (带有注释和测试的备用代码)

所以,没有区别。编译:

gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)

在函数中使用非静态数组时的时间结果:

./trial.out  57.32s user 0.04s system 97% cpu 58.810 total

./trial.out 57.77s user 0.04s system 97% cpu 59.259 total

同样,没有区别。因为当你使用一个数组时,它是你函数堆栈的一部分而不是堆,所以每次调用函数时都没有预留内存的开销。如果您使用动态分配,情况将完全不同(在这种情况下,我怀疑性能会有巨大差异)。

关于c++ - 定义静态全局数组以避免在函数中定义它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464847/

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