手机
当前位置:查字典教程网 >编程开发 >C语言 >从汇编看c++中变量类型的深入分析
从汇编看c++中变量类型的深入分析
摘要:全局变量的生命期和可见性是整个程序的运行期间,下面就来用汇编来看一下实际情况:c++源码:复制代码代码如下:inti=2;//全局变量int...

全局变量的生命期和可见性是整个程序的运行期间,下面就来用汇编来看一下实际情况:

c++源码:

复制代码 代码如下:

int i = 2;//全局变量

int main() {

int j = i;

}

下面是汇编代码:

复制代码 代码如下:

PUBLIC ?i@@3HA ; i

_DATA SEGMENT

?i@@3HA DD 02H ; 全局变量i内存空间

_DATA ENDS

PUBLIC _main

; Function compile flags: /Odtp

; File c:usersadministratordesktopc++testa.cpp

_TEXT SEGMENT

_j$ = -4 ; size = 4

_main PROC

; 3 : int main() {

push ebp

mov ebp, esp

push ecx;为局部变量分配4字节存储区

; 4 : int j = i;

mov eax, DWORD PTR ?i@@3HA ; 获取全局变量i的的值

mov DWORD PTR _j$[ebp], eax;eax存有i的值,将它赋给局部变量j

; 5 : }

xor eax, eax

mov esp, ebp;//栈顶指针恢复,释放为j分配的栈空间

pop ebp

ret 0

_main ENDP

_TEXT ENDS

从汇编语言中可以看到,全局变量i的内存分配在内存中的数据区(由_DATA指定),因此在程序运行的过程中始终存在,所以对于程序中的所有部分都可以访问,而且随着程序的结束销毁;而局部变量j的内存是在运行main函数中在栈上动态分配,而且main函数结束后,此空间被释放,因此在main函数外面不能访问局部变量j。

实际上,在操作系统载入可执行文件的时候,它首先将数据区中的数据载入相应的内存,然后才开始运行程序,因此,全局变量产生在文件加载之后,第一条程序语言执行之前。

【从汇编看c++中变量类型的深入分析】相关文章:

用32位int型变量表示单引号括起来的四个字符的深入探讨

从汇编看c++中extern关键字的使用

数组和指针的区别深入剖析

c++ 临时对象的来源

C++嵌套类与局部类详细解析

基于c++中的默认拷贝函数的使用详解

基于getline()函数的深入理解

解决C++中重定义的方法总结

浅析C/C++变量在内存中的分布

C++中const的实现机制深入分析

精品推荐
分类导航