我最近了解到声明函数或/和变量为静态可以减少占用空间,但我无法弄清楚原因。大多数在线文章都关注范围和可读性,但未提及有关内存分配的任何好处。 “静态”真的能提高性能吗?
答案 0 :(得分:1)
text dates details location...
关键字主要是关于语义,而不是关于性能。如果你想要一个通过同一个函数的多次调用而持续存在的变量,请声明它为static
。如果您不想要,请不要将其声明为static
。也就是说,静态变量具有性能优势,即它们只被初始化一次而不是每次调用函数时。在其他情况下,静态变量较慢,因为它们更可能不在缓存中。自动变量通常总是被缓存,因为它们通常分配在堆栈上,这通常是一个热门区域,缓存方式。因此,您应该创建查找表或常量变量static
,除非有特殊原因(例如,某些人使用自动常量变量作为令牌传递给另一个函数)。
对于功能,同样适用:当您不想从其他翻译单元调用时,请创建一个功能static
。你应该绝对做出适用的所有函数static
。在需要保留符号插入能力的ABI上(即在加载时交换全局符号的定义的能力),编译器只能内联静态函数。此外,编译器可以从二进制文件中删除未使用的静态函数。只有在函数不是静态的情况下才使用整个翻译单元时,才可以进行此操作。
答案 1 :(得分:-1)
使用static
变量是否会提高效率取决于
很多东西,包括变量和硬件的使用
处理器的架构。 C
标准未指定此内容。
如果需要变量在一次调用之间保留其值 功能和下一个,它必须有静态存储持续时间。 否则,唯一可以确定的方法是两种方式进行编码 并做定时测试。