变量在内存中的形态

全局变量

 所在地址为数据区,生命周期与所在模块一致

 使用立即数间接访问

局部变量

所在地址为栈区,生命周期与所在函数作用域一致

使用espebp间接访问

静态变量

 全局静态变量:

与全局变量类似,但只能在文件内使用,但这只是在编译之前的语法检查 过程中对访问外部的全局静态变量做出了限制,但在内存结构和访问原理上,静态全局和普通全局变量没有区别,相当于全局静态等价于编译器去做了限制

 局部静态变量:

局部静态变量如同全局变量一样,都保存在执行文件中的数据区,但由于静态局部变量被定义在某一作用域内,让我们产生错觉,误认为他是生命起点,其实,局部静态变量预先会被看做是全局变量处理,而它的初始化部分只是在做赋值操作。

当然,之所以能够实现局部静态变量的初始化只会进行一次,是因为设置了标志位,通过标志位来标记该静态局部变量是否已经初始化,如果已经初始化则跳过初始化语句,如果没有初始化,则进行初始化,这个标志位用1个字节来表示

局部静态变量如何做到作用域的限制,这是编译进行了名称粉碎法,在编译期间将静态局部变量重新命名(如同函数重载的实现原理)

堆变量

 使用mallocnew进行堆空间申请,利用freedelete进行堆空间释放。内存中,堆结构的每个节点都是使用双向链表的形式存储,每申请的一块内存,将首地址结构体插入到链表,每释放一块内存,则也会把地址结构体从链表中删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值