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

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

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

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

楼上只说一半,可致电A和B是两个功能确实使用包括添加a.cpp和b.cpp的main.cpp里面使用包括实际的相应的代码的位置。真的做的项目没有这样做,并正在使用的头文件,

静态函数和变量在其他文件中是完全不可见的,这是错误的的地方楼上,即使有出口extern声明函数不能在编译的时候没有通过,将上报的静态类型错误,不能导出。 。 。在
头文件中加入你的原始文件结构:
/ /啊
#包括
使用命名空间std;
无效的(??); BR / / / BH
无效();

然后改变里面的两个main.cpp中包括AH和BH编译:g+ +的main.cpp的a.cpp b.cpp会发现报告的错误:
a.cpp:在函数'无效():
a.cpp:3:错误:无效()“被宣布为”外部“和后来的”静态“
啊:3:错误:()先前的声明“无效”

这里是因为一个函数的静态类型,你不能出口,摆脱静态这里可以编译通过。 。 。 。
这是静态的使用追问

其实正确的说法是这样,c中函数加上static关键字只是把函数的作用域限制在当前文件中,而要想减少函数调用时的堆栈开销的话就得在满足一定条件的前提下加上inline关键字

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-03
静态函数是在内存中单独开辟内存,该内存区域的数据一直保存至函数的生命期结束,调用时会直接读取该区域数据,而非静态函数则是每次动态地开辟内存。但是还是建议尽量少用静态函数。追问

你这个是错的

第2个回答  2013-08-29
我今天面试的时候遇到了这个问题,面试官回答也是在调用时会copy和不copy。但是我还是觉得这是C++里面的编译方式。按照我对C的了解,内存就分了那么几个段,也没有发现在调用C函数的时候还COPY了代码的。代码段就一个段啊。所以我也想知道到底是说吗情况,有没有大侠指导一下啊。追问

静态函数不存在什么单独开辟内存之说,静态函数的参数依然要进栈,静态函数所做的只是在汇编的时候把函数默认的.globe符号给去掉了使得静态函数只在当前的文件中生效。

第3个回答  2013-02-03
静态成员函数只能访问类的静态成员。静态数据成员属于整个类,被类的所有对象共享。追问

我都说了不是c++的静态方法

第4个回答  推荐于2016-01-16
分配的时候 计算机会分配四个区 代码区 全局数据区 堆区 栈区
全局变量和静态变量是存在全局数据区的 系统初始化会默认为0 不是垃圾数据本回答被提问者采纳
相似回答