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

发布:jingxian 字体:[增加 减小] 类型:转载

本篇文章是对c++中的变量类型进行了详细的分析介绍。需要的朋友参考下

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

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:\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。

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

发布:jingxian 字体:[增加 减小] 类型:转载

本篇文章是对c++中的变量类型进行了详细的分析介绍。需要的朋友参考下

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

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:\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。

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


相关内容

  • 简单的C语言编译器
  • 中国好资料 一个简单的C 语言编译器 一.小组成员 朱嘉俊(3991102161) 王筱(3991102168) 朱杭(3991102162) 朱林(3991102094)计算机996计算机996计算机996计算机994 二.运行方式 在DOS 环境下运行: Cminus.exe -h 三.概述 经 ...

  • C面试笔试题
  • C/C++ 笔试.面试题目(1) 1.求下面函数的返回值(微软) int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999. 答案:8 思路:将x转化为2进制, ...

  • 各种编程语言的特点
  • 各种编程语言的特点.txt Pascal语言: Pascal是一种计算机通用的高级程序设计语言,由瑞士Niklaus Wirth教授六十年代末设计并创立的. Pascal的主要特点有:严格的结构化形式.丰富完备的数据类型.运行效率高.查错能力强等特点. 由于上述特点,Pascal可以方便用于描述各种 ...

  • 各种编程语言的区别与联系
  • java:分三大平台 java se (j2se),java ee(j2ee),java me(j2me) java se是java ee和java me的基础 java ee是目前位置企业级开发平台中最牛的 java me是用来开发移动嵌入式程序的,例如手机游戏 java 的优点是非常适合用于开发 ...

  • [高级语言程序设计]
  • <高级语言程序设计>教学大纲 王林平 编 一.总则 1. 教学目的与要求 (1)教学目的 <高级语言程序设计>是学习研究计算机及其应用的一门很重要的专业基础课程.它为<数据结构>.<操作系统>等其它专业基础课或专业课程奠定程序设计的基础,又是其它专业课 ...

  • C和C++语言产生随机数的过程分析
  • 摘要: random()函数和rand()函数都可以产生随机数,但是,两者的实现过程是不一样的,在使用这两个函数时总是会遇到一些疑问.该文结合实例分析了rand()函数产生随机数的过程,对不同随机函数的使用有一定的指导意义. 关键词:C++语言: 随机函数:随机数 中图分类号:TP312 文献标识码 ...

  • 学生信息管理
  • 天津职业技术师范大学 Tianjin University of Technology and Education <数据库系统概论> 课程设计报告 学生信息管理系统 专 业: 计算机科学与技术 班级学号: 学生姓名: 指导教师: 二〇一一年六月 一.实验名称: 学生信息管理系统 张彩娟 ...

  • 软件设计师考试经验
  • "软件设计师"考试经验谈 Posted on 2008-10-22 09:55 龙怀玉 阅读(694) 评论(1) 编辑 收藏 第一部分,关于题型 CASL:这是每年必考的一个试型, 在下午试题中最近几年都是一个题, 今年不会有什么变化.依然为一个题,5个空, 每空3分. C/C ...

  • C#核心知识
  • C# 的总复习 前言: 编程语言的进化 1.计算机语言: 用的是指令直接来对电脑进行操作,速度最快,不过只是识别10100的语言,不容易被大多数人掌握. 2.汇编语言: 用汇编语言可以更简单地编写计算机语言.主要是借助一些 易于记住的命令编写的.简洁,但是不容易学,运行时间短.一般大多数厉害的 黑客 ...