设为首页 - 加入收藏
广告 1000x90
您的当前位置:144177黄大仙有求必应 > 静态函数 > 正文

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

来源:未知 编辑:admin 时间:2019-08-09

  静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。

  我不理解的是这句“静态函数会被自动分配在一个一直使用的存储区,所以能避免调用函数时压栈出栈。”

  为什么会是这样,难道在调用静态函数时就不用把调用函数的参数、调用函数返回地址和调用函数栈低指针进栈了?

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

  那句话其实说的是 局部静态变量 局部静态变量 在编译的时候是会放进数据区而不进栈的。静态函数不存在什么单独开辟内存之说,静态函数所做的只是在汇编的时候把.globe符号给去掉了使得静态函数只在当前的文件中生效。展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  全局变量和静态变量是存在全局数据区的 系统初始化会默认为0 不是垃圾数据

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

  静态函数和变量在其他文件中是完全不可见的,这是错误的的地方楼上,即使有出口extern声明函数不能在编译的时候没有通过,将上报的静态类型错误,不能导出。 。 。在

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

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

  其中静态函数是有static修饰的函数,如果没有,则为非静态函数(全局函数)。

  而非静态函数(不带static的),可以在任何一个文件中使用。当在其它文件中使用时,需要做函数声明后再使用。

  静态函数是在内存中单独开辟内存,该内存区域的数据一直保存至函数的生命期结束,调用时会直接读取该区域数据,而非静态函数则是每次动态地开辟内存。但是还是建议尽量少用静态函数。

  我今天面试的时候遇到了这个问题,面试官回答也是在调用时会copy和不copy。但是我还是觉得这是C++里面的编译方式。按照我对C的了解,内存就分了那么几个段,也没有发现在调用C函数的时候还COPY了代码的。代码段就一个段啊。所以我也想知道到底是说吗情况,有没有大侠指导一下啊。静态函数不存在什么单独开辟内存之说,静态函数的参数依然要进栈,静态函数所做的只是在汇编的时候把函数默认的.globe符号给去掉了使得静态函数只在当前的文件中生效。

本文链接:http://that-a-way.com/jingtaihanshu/535.html

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top