1.存储类别:
存储类别指的是数据在内存中存储的方法。分为静态存储和动态存储两大类。
包含4种:
自动的(auto) 函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。
静态的(static) 局部变量的值在函数调用结束后不消失而保留原值,
寄存器的(register) C语言允许将局部变量得值放在CPU中的寄存器中,在寄存器中的变量是不能取地址。且数量有限一般为2 到3个。
只有局部自动变量和形式参数才能够被定义为寄存器变量,全局变量和局部静态变量都不能被定义为寄存器变量。
外部的(extern) 外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。
如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。
2.内存中用户存储空间的分配情况(三种):
程序区:存放程序语句
静态存储区:全局变量,局部静态变量(extern,static)。存放全局变量,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。
动态存储区:函数形参变量(在调用函数时给形参分配存储空间);局部动态变量(auto ,register);函数调用现场保护和返回地址等。
任何临时变量都是处于栈区的,包括在main()函数中定义的变量 ;
const修饰局部变量则存放在栈区,如果修饰全局变量就存放在全局区
参考资料
寄存器变量:https://www.cnblogs.com/reality-soul/p/6369792.html