程序的局部变量全局变量动态申请数据分别存储在什么地⽅?程序的局部变量全局变量动态申请数据分别存储在什么地⽅?
1、栈区(stack)— 由⾃动分配释放 ,存放函数的参数名,的名等。其操作⽅式类似于数据结构中的栈。
2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配⽅式倒是类似于。
3、静态区(static)—和局部的存储是放在⼀块的。程序结束后由系统释放。
4、⽂字常量区—常量字符串就是放在这⾥的,程序结束后由系统释放 。
5、程序代码区— 存放的。
量的类别:
根据作⽤域可分为全局变量和局部变量。
根据⽣存周期可分为静态存储⽅式和动态存储⽅式,具体地⼜分为⾃动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。
静态存储⽅式是指在程序运⾏期间分配固定的存储空间的⽅式,动态存储⽅式是在程序运⾏期间根据需要进⾏动态的分配存储空间的⽅式。
每⼀个变量均有作⽤域和存储类别两个属性,这些属性共同⽤于描述⼀个变量,这些不同类型的变量与存储位置的关系如下:
外部变量(全局变量)、静态外部变量、静态局部变量存储在静态存储区。
⾃动局部变量(局部变量默认为⾃动局部变量)、函数形参存储在动态存储区,不论是静态存储区还是动态存储区均属于内存中的⽤户区。
但是,寄存器变量是存储在CPU寄存器中的⽽不是内存中。
⾸先说明⼀下与作⽤域相关的⼏个属性:
局部变量:在⼀个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使⽤它们,在此函数以外是不能使⽤这些变量的,这种类型的变量就称为“局部变量”。
全局变量:在函数外定义的变量,可以为本源⽂件中其它函数所公⽤,有效范围为从定义变量的位置开始到本源⽂件结束,这种类型的变量就称为“全局变量”。
接下来说明⼀下与存储类型相关的⼏个属性:
atuo:在声明局部变量时,若不指定 static,默认均是 auto,这类变量都是动态分配存储空间的,数据存储在动态存储区中。
static修饰的变量static:在声明局部变量时,使⽤关键字 static 将局部变量指定为“静态局部变量”,这样在函数调⽤结束后不消失⽽保留原值,即占⽤的存储单元不释放,在下⼀次函数调⽤时,该变量已有值就是上次函数调⽤结束时的值。
register:在声明动态局部变量或者函数形参时,可将变量声明为register,这样编译系统就会为变量分配⼀个寄存器⽽不是内存空间,通过这种⽅式可提升对某些局部变量频繁调⽤的程序的性能。(寄存器运算速度远⾼于内存)
extern:⽤于扩展全局变量的作⽤域,⽐如如果函数想引⽤⼀个外部变量,但该外部变量在该函数后定义,那么这个函数需要使⽤ extern 来声明变量,这样才能使⽤在该函数后⾯定义的全局变量。此外,extern 还可以在多⽂件的程序中声明外部变量。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论