-
static:
1、修饰变量和函数
2、全局变量编译时赋初值,局部变量运行时初始化
3、修饰的变量存放在数据区,生命周期同程序
4、作用域为当前文件 -
inline:
1、在编译时由编译器选择性展开,函数复杂时(包含循环语句等)可能作为函数编译
2、由编译器校验展开后的正确性
3、没有压栈开销
4、不生成符号表
5、只在release生效,debug不生成符号表但有函数压栈,用于调试 -
define:(预编译指令,非关键字)
1、在预编译时展开
2、仅做字符串替换,不校验逻辑 -
typedef
1、重定义名称,类似define,但不是简单的宏替换,在编译时展开校验
2、简化复杂的类型声明,例如定义函数类型、结构体等 -
const
1、修饰变量的内容或者指向的内容不可改变,在编译运行时使用,占用存储单元
2、const全局变量存储在只读数据段,编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放
3、const局部变量存储在栈中,代码块结束时释放 -
regitser
1、修饰的变量尽可能的存放在CPU寄存器中,而不是内存中,不能取地址
2、有基于寄存器的数量限制
3、修饰的变量的不能大于整型的长度 -
volatile
在两次读取变量时没有对变量值进行修改,编译器会对变量的值优化到寄存器读取,但变量在内存中的值可能会被其他程序或者线程修改
1、提示编译器修饰的变量需要每次从内存中获取值,而不是寄存器,用于解决读取失效问题
2、一般应用于多线程应用中被共享的变量
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)