C语言静态函数的问题,不是C++里的静态方法

网上所说的
C语言中使用静态函数的好处:
静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。

我不理解的是这句“静态函数会被自动分配在一个一直使用的存储区,所以能避免调用函数时压栈出栈。”
为什么会是这样,难道在调用静态函数时就不用把调用函数的参数、调用函数返回地址和调用函数栈低指针进栈了?
经过多方查证其实正确的说法是这样,c中函数加上static关键字只是把函数的作用域限制在当前文件中,而要想减少函数调用时的堆栈开销的话就得在满足一定条件的前提下加上inline关键字

----------------update--------------------
最近看了一本书总算把这问题彻底搞明白了,那本书是从汇编的角度说的
那句话其实说的是 局部静态变量 局部静态变量 在编译的时候是会放进数据区而不进栈的。静态函数不存在什么单独开辟内存之说,静态函数所做的只是在汇编的时候把.globe符号给去掉了使得静态函数只在当前的文件中生效。

第1个回答  2015-10-31
1、静态函数是函数的一种,函数包括静态函数和非静态函数两种。
其中静态函数是有static修饰的函数,如果没有,则为非静态函数(全局函数)。

2、当整个程序只有一个C文件时,二者没有区别。
当程序是由多个C文件组成时,二者的作用域,即可使用的范围不同。
其中,静态函数(带static的),只能在本文件中使用,无法跨文件。
而非静态函数(不带static的),可以在任何一个文件中使用。当在其它文件中使用时,需要做函数声明后再使用。
第2个回答  2013-02-03
静态函数不会没掉
相似回答