2014年(7)
分类: LINUX
2014-09-25 11:08:21
原文地址:变量——4种存储型变量 作者:来年背书包
定义需要分配内存空间 初始化不需要分配内存。2.变量的作用域
3.变量存储方式局部变量:在函数内部定义全局变量 : 定义在所有函数外面(全局变量存在于.data段 同名局部变量会屏蔽全局变量)
c语言程序占内存分配:
栈 | 向低地址扩展 局部变量,函数参数值。堆 | 向高地址扩展 动态申请内存的变量 malloc()free().bss | 未初始化数据段 未初始化的全局变量.data | 初始化数据段 初始化的全局变量 ,静态变量 ,常数等.code | 代码段 常量 、程序代码
变量存储方式分为静态存储方式和动态存储方式两种在C语言中变量的存储类型分为4中
自动变量和寄存器变量属于动态存储方式 外部变量和静态变量属于静态存储方式。:auto 自动变量:static 静态变量:register 寄存器变量:extern 外部变量变量的完整形式为:存储类型 数据类型 变量名
auto : 函数内部未加存储类型说明的默认为auto ,可省略不写 ,默认类型均为auto自动变量。static :静态局部变量限制在本函数内使用,若静态局部变量未赋初值则系统自动赋予0值。:静态全局变量 限制在本文件实用 ,未加global修饰的全局变量可在本工程的其他文件中实用。register:尽量申请变量放在寄存器中,加快效率。extern : 表示该变量在其他(外部)文件中定义过。
关于static大家要注意这几点:
a. static修饰变量。在修饰全局变量的时候,作用于限定于被定义的文件中,使用extern也不能访问; 在修饰局部变量的时候,在函数体中定义,只能用于该函数,即使使用该函数结束,静态变量也不会被销毁,下次可以继续使用,即缩小了访问范围但是延长了访问时间。
b. 修饰函数的时候,函数的作用于仅限于本文件,故也叫内部函数,和修饰全局变量类似。这就是为什么linux内核中所有的函数和全局变量都声明为static的原因,linux内核代码很多,有几万个文件,为了防止文件中的函数重名造成冲突,所以就干脆声明为静态的。
c. Static修饰的静态变量,一次定义多次使用,值具有继承性(可以被修改),静态区BSS段中,初始值为0,修饰全局变量也一样,未初始化时,初始值为0;为在栈区,即局部变量中,未初始化的变量,初始值全部都是随机的脏数据。