使用内部静态变量来提高性能?

gro*_*ndi 8 c

我有一个函数需要相当多的内部临时存储来进行计算(一些矩阵运算),我知道这个函数会被频繁调用(比如整个程序运行时的每毫秒).我的直觉告诉我,最好将这些临时变量声明为静态,因此每次调用函数时都不会再次创建它们.每次调用函数时我都必须初始化它们,因此功能目的不需要保持它们存活.我知道让它们静态会破坏线程安全性,但这不是问题.

由于知识通常比任何直觉都好,我想知道处理这种情况的"正确"方法是什么.

void frequentlyCalledFunction(void)
{
    double matrix1[10][10];
    double matrix2[10][10];
    /* do something with the matrices ... */
}
Run Code Online (Sandbox Code Playgroud)

要么

void frequentlyCalledFunction(void)
{
    static double matrix1[10][10];
    static double matrix2[10][10];
    /* do something with the matrices ... */
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*dle 16

没有区别."创建"未初始化的数组不需要代码.

在静态数组的情况下,内存保留并始终可用.在自动数组的情况下,它位于堆栈上,"创建"它所需的只是移动堆栈指针,这在进入函数时无论如何都会发生.

(有一天你会尝试在多线程程序中使用该功能,静态版本会偶尔出现间歇性故障,导致你喝酒和吸毒.这不值得冒风险.)


Jon*_*eet 10

我肯定会先用最简单,最易阅读的方式写出来.每毫秒听起来像一个很少运行的功能是微优化.

一旦你有了它的工作,对它进行基准测试.确定性能是否足够好.如果不是,请再次进行优化和基准测试.如果没有非常可靠的数字,请不要将干净的代码弯曲变形以备份您的决定.


hrn*_*rnt 5

像往常一样,你应该先进行剖析.局部变量可能只会导致堆栈指针递减一点,不应该有任何性能损失.