默认情况下,全局变量初始化为“0”。
当我明确地为其赋值“0”时,它会产生多大的差异(如果有的话)。
其中任何一个是更快/更好/更优化吗?
我尝试使用一个小样本.c程序,但我看不到可执行文件大小的任何变化。
编辑:0 我只是想了解这种行为。它在任何方面都不是我的瓶颈。
答案 0 :(得分:5)
您的问题的答案是特定于实现的,但通常所有未初始化的全局和静态变量最终都在.bss段中。显式初始化的变量位于其他data segment中。在执行main()
之前,这两个都将被程序加载器复制。因此,显式初始化为零,并且保持变量未初始化之间不应存在任何性能差异。
IMO最好将全局变量和静态值显式初始化为零,因为它清楚地表明预期零初始值。
答案 1 :(得分:2)
当你说优化时,我假设你的意思更快。如果是这样,那就不会有任何区别。编译器甚至可能删除全局变量的初始化(在编译器内部不确定)。如果你的意思是程序的空间利用率 - 那么两者之间也没有区别。
更大的问题是 - 是否有一个特定的原因,你试图通过全局变量的初始化来优化。你能解释一下吗?
答案 2 :(得分:2)
没有显式初始化程序的静态对象在启动时初始化为零。无论是否将对象显式初始化为0
都可能在性能方面没有区别,因为编译器通常会在main
之前一次初始化所有零对象。
// File scope
// Same code is likely to be generated for the two objects initialization
int bla1;
int bla2 = 0;
另一方面,如果您指定0
而不是初始化,则可能会有所不同,因为编译器无法推断对象的先前值是什么。
void init(void)
{
bla1 = 0;
bla2 = 0;
}
答案 3 :(得分:1)
我怀疑是否存在差异,但即使存在差异,我也更加怀疑你的程序是如此优化以至于瓶颈就是这样。
我宁愿建议不要关心所有这类问题并编写你喜欢的代码,也许让位于可读性而不是速度,只将优化作为最终问题。
过早优化是所有邪恶的根源
答案 4 :(得分:1)
没有。优化器将其视为无操作。
显式初始化对于未经训练的眼睛来说更加冗长和清晰。如果您的团队中有青少年,我会明确初始化这些变量。