七、变量在内存中的位置和访问方式

7.1 全局变量和局部变量的区别

定义全局变量: int g_nVariableType=117713190;

然后获取全局变量的内存地址:

通过调试获取全局变量所在地址 0x00421A30 ,地址中的数据为 0x07042926,转换为十进制为 117717190. 全局变量在文件中的地址定位和常量 相同,也需要减去基地址,然后查阅节表得到文件地址。本示例中基地址为0x00400000,它的全局变量对应在文件0x00021A30的偏移地址处

在访问方式 上,局部 变量的访问是通过栈指针相对间接访问,而全局变量的内存地址在全局数据中,通过栈指针无法访问到。访问全局变量和访问常量类似--都是通过立即数来访问。

7.2 局部静态变量的工作方式

局部静态变量与全局变量都保存在执行文件中的数据区中,局部静态变量会预先被作为全局变量处理,而它的初始化部分只是在做赋值操作而已。

7.3 堆变量

在C\C++中,使用malloc与new实现堆空间的申请,返回的数据便是申请的堆空间的地址。相对应的,使用free与delete完成堆空间释放,但需要申请堆空间时得到的首地址。如果这个首地址丢失将无法释放堆空间,从而导致内存泄漏。

保存堆空间首地址的变量大小为4字节的指针类型,其访问方式按作用域来分,和之前所介绍的全局,局部 以及静态的表现形式相同。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容