源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

从汇编看c++中变量类型的深入分析

  • 时间:2020-08-19 21:14 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:从汇编看c++中变量类型的深入分析
[b]全局变量的生命期和可见性是整个程序的运行期间,下面就来用汇编来看一下实际情况:[/b] [b]c++源码: [/b]
[u]复制代码[/u] 代码如下:
int i = 2;//全局变量 int main() {     int j = i; }
[b]下面是汇编代码: [/b]
[u]复制代码[/u] 代码如下:
PUBLIC    ?i@@3HA                        ; i _DATA    SEGMENT ?i@@3HA    DD    02H                    ; 全局变量i内存空间 _DATA    ENDS PUBLIC    _main ; Function compile flags: /Odtp ; File c:\users\administrator\desktop\c++\test\a.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。 实际上,在操作系统载入可执行文件的时候,它首先将数据区中的数据载入相应的内存,然后才开始运行程序,因此,全局变量产生在文件加载之后,第一条程序语言执行之前。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部