我有一个函数需要相当多的内部临时存储来进行计算(一些矩阵运算),我知道这个函数会被频繁调用(比如整个程序运行时的每毫秒).我的直觉告诉我,最好将这些临时变量声明为静态,因此每次调用函数时都不会再次创建它们.每次调用函数时我都必须初始化它们,因此功能目的不需要保持它们存活.我知道让它们静态会破坏线程安全性,但这不是问题.
由于知识通常比任何直觉都好,我想知道处理这种情况的"正确"方法是什么.
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
我肯定会先用最简单,最易阅读的方式写出来.每毫秒听起来像一个很少运行的功能是微优化.
一旦你有了它的工作,对它进行基准测试.确定性能是否足够好.如果不是,请再次进行优化和基准测试.如果没有非常可靠的数字,请不要将干净的代码弯曲变形以备份您的决定.