function10-static/inline
引用
- static
- inline
这俩在C语言中也出现过所以不陌生。
前言
勿忘模板,二刷常态~~哈哈哈
static 通常用作声明静态变量static type name
例如:static int a;
static变量如果没有指定初始化,那么会自动初始化为0,且只能初始化一次。
而且静态变量即使离开作用域也不会立刻销毁,说明不是存在于栈区的数据。
inline 将函数以内联的方式嵌入到调用的函数。inline int Add(int a,int b){ return a+b; }
内联函数会建议编译器把这个函数处理成内敛代码以提升性能,但是否采用看编译器决定。
正文
static
1 |
|
多次调用后发现static的值是累积的,说明函数结束后static的确没有被释放
但是作用域还是在那块函数内,就是说离开那个函数无法对变量进行操作。除非生成一个全局的静态变量,也就是将其放在main函数头上。
inline
1 | int add(int a,int b){ |
正常情况下调用add函数的汇编无非就是两个参数压入栈,然后call到函数地址,运行完后add esp,8恢复栈平衡。
但是如果是内联函数,编译器就有可能进行优化:
1 | inline int add(int a,int b){ |
但需要注意是有可能,现代编译器的智能化更明显,编译选项本身就有优化选项,所以不能百分之百确定会怎么被优化。
当然inline优化一般也是针对函数体比较简单的情况下,复杂的时候雀食不好优化得交给编译器处理。
反汇编的时候,debug可能还是保留过程,release大概会优化
结语
inline在后面就越来越少了,static还有其他用武之处放后面用到再说。
当然操作肯定不会局限于一个源文件下编译的时候,当这俩存在头文件中或者其他源文件又会怎么调用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Box'Blog!
评论