C中的静态函数如何减少内存占用量?

时间:2016-08-01 09:34:09

标签: c

我最近了解到声明函数或/和变量为静态可以减少占用空间,但我无法弄清楚原因。大多数在线文章都关注范围和可读性,但未提及有关内存分配的任何好处。 “静态”真的能提高性能吗?

2 个答案:

答案 0 :(得分:1)

text dates details location...关键字主要是关于语义,而不是关于性能。如果你想要一个通过同一个函数的多次调用而持续存在的变量,请声明它为static。如果您不想要,请不要将其声明为static。也就是说,静态变量具有性能优势,即它们只被初始化一次而不是每次调用函数时。在其他情况下,静态变量较慢,因为它们更可能不在缓存中。自动变量通常总是被缓存,因为它们通常分配在堆栈上,这通常是一个热门区域,缓存方式。因此,您应该创建查找表或常量变量static,除非有特殊原因(例如,某些人使用自动常量变量作为令牌传递给另一个函数)。

对于功能,同样适用:当您不想从其他翻译单元调用时,请创建一个功能static。你应该绝对做出适用的所有函数static。在需要保留符号插入能力的ABI上(即在加载时交换全局符号的定义的能力),编译器只能内联静态函数。此外,编译器可以从二进制文件中删除未使用的静态函数。只有在函数不是静态的情况下才使用整个翻译单元时,才可以进行此操作。

答案 1 :(得分:-1)

使用static变量是否会提高效率取决于 很多东西,包括变量和硬件的使用 处理器的架构。 C标准未指定此内容。

如果需要变量在一次调用之间保留其值 功能和下一个,它必须有静态存储持续时间。 否则,唯一可以确定的方法是两种方式进行编码 并做定时测试。