Mic*_*ens 7 c variables optimization declaration
多长时间需要用C来声明一个变量,例如int x
或unsigned long long var
?我想知道它是否会使我的代码更快地在这样的东西.
for (conditions) {
int var = 0;
// code
}
Run Code Online (Sandbox Code Playgroud)
这样做会更快,还是更容易?
int var;
for (conditions) {
var = 0;
// code
}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
Ned*_*der 14
一条建议:不要担心哪种语言结构在显微镜下比其他语言结构更快或更慢,而是专注于哪些语言结构让你最好地表达自己.
另外,要找出代码花费时间的位置,请使用分析器.
正如其他人所指出的那样,声明纯粹是编译时的事情,它们不会影响执行时间.
AnT*_*AnT 11
它没有任何区别.在传统实现中,声明本身(不包括初始化)不生成机器指令.函数序言代码通常一次为所有局部变量分配堆栈中的空间,无论它们在何处被声明.
但是,在声明局部变量的情况下,至少在理论上可以间接影响代码的性能.当您将变量声明为尽可能本地(您的第一个变体)时,通常情况下,它会导致函数为其局部变量保留的堆栈帧的较小大小(因为堆栈中的相同位置可以由不同的局部变量共享)在不同的时间).具有较小的堆栈帧减少了一般堆栈内存消耗,即,当执行嵌套函数调用时,堆栈大小不会快速增长(特别是对于递归函数而言是显着的).它通常可以提高性能,因为新的堆栈页面分配不常发生,并且堆栈内存位置变得更好.
当然,后面的考虑因素取决于平台.它可能对您的平台和/或您的应用程序产生很小的影响或没有影响.
每当你对性能有疑问时,最好的办法就是围绕它进行循环(数百万次迭代)并计时.但是,在这种情况下,您可能会发现它没有任何区别.
正确表达代码意图更为重要.如果你需要在你的循环之外的变量,在外面delare它.如果你只需要循环中的变量,请在里面声明它.
您应该始终在尽可能最窄的范围内声明和初始化变量.
无论如何,你不应该担心这些类型的微观优化(除了最稀有,最罕见的情况).如果您真的需要担心潜在的纳秒级性能改进,请测量差异.您的变量声明不太可能是应用程序中最大的瓶颈.