C的存储类别

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

原文地址:https://www.cnblogs.com/Gimiracle/p/13865443.html