7.1 全局变量和局部变量的区别
定义全局变量: int g_nVariableType=117713190;
然后获取全局变量的内存地址:
通过调试获取全局变量所在地址 0x00421A30 ,地址中的数据为 0x07042926,转换为十进制为 117717190. 全局变量在文件中的地址定位和常量 相同,也需要减去基地址,然后查阅节表得到文件地址。本示例中基地址为0x00400000,它的全局变量对应在文件0x00021A30的偏移地址处
在访问方式 上,局部 变量的访问是通过栈指针相对间接访问,而全局变量的内存地址在全局数据中,通过栈指针无法访问到。访问全局变量和访问常量类似--都是通过立即数来访问。
7.2 局部静态变量的工作方式
局部静态变量与全局变量都保存在执行文件中的数据区中,局部静态变量会预先被作为全局变量处理,而它的初始化部分只是在做赋值操作而已。
7.3 堆变量
在C\C++中,使用malloc与new实现堆空间的申请,返回的数据便是申请的堆空间的地址。相对应的,使用free与delete完成堆空间释放,但需要申请堆空间时得到的首地址。如果这个首地址丢失将无法释放堆空间,从而导致内存泄漏。
保存堆空间首地址的变量大小为4字节的指针类型,其访问方式按作用域来分,和之前所介绍的全局,局部 以及静态的表现形式相同。