• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 从汇编看c++中extern关键字的使用

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了汇编 extern,c++中extern,c++ extern,c++ extern用法,extern关键字等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在c++中,extern关键字用来声明变量和函数,在声明函数的时候,有和没有extern的效果一样,即下面两条语句具有同样的效果:

下面是有extern的情形时的c++源码:

    push    ebp
    mov    ebp, esp;esp为指向栈顶的一个寄存器,始终指向栈顶 ebp也是一个寄存器,用来在给main函数分配的栈空间上寻访局部变量,因此常常作为基址
                ;上面两句的作用是将前一个栈的基址保存(压栈),然后让ebp指向当前函数的栈空间,再次作为基址

; 2    :     extern int i;
; 3    : }

    xor    eax, eax
    pop    ebp
    ret    0;这三句是用来退栈用,以及函数的返回
</div>
从上面的汇编码可以看出,并没有为变量i在站上分配任何存储空间

下面是没有extern的情形的c++源码:

    push    ebp
    mov    ebp, esp
    push    ecx;与有extern时的最大的不同就是这一句
               ;ecx也是一个寄存器,这里讲ecx的值压栈,等同于为变量i在栈上分配了存储空间
               ;由于ecx中的值不确定,因此,如果我们访问没有初始化的局部变量,常常得到一个奇怪的值

; 2    :     int i;
; 3    : }

    xor    eax, eax
    mov    esp, ebp
    pop    ebp
    ret    0
</div>
可以看出,没有extern关键字时,确实为变量i在栈上分配了存储空间

上面的汇编使用cl指令在命令行产生的,如果用vs2010来产生汇编码,汇编码可能不一样,但意思是一样的。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-28使用c语言生成随机数的示例分享
  • 2017-05-28c++ dynamic_cast与static_cast使用方法示例
  • 2017-05-28浅析顺序结构存储的栈
  • 2017-05-28C++编程指向成员的指针以及this指针的基本使用指南
  • 2017-05-28详解C语言求两个数的最大公约数及最小公倍数的方法
  • 2017-05-28浅谈Windows系统下C语言编程中Glib库的使用
  • 2017-05-28学习C语言要掌握的几个库
  • 2017-05-28C语言实现的一个万年历小程序
  • 2017-05-28STL区间成员函数及区间算法总结
  • 2017-05-28深入理解结构体中占位符的用法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解C语言结构体中的函数指针
    • C++位操作的常见用法小结
    • C语言中的abs()函数和exp()函数的用法
    • iostream与iostream.h的区别详细解析
    • C++基础入门教程(四):枚举和指针
    • C语言的递归思想实例分析
    • C++循环队列实现模型
    • c语言随机数函数示例
    • linux之awk命令的用法
    • 通俗地理解什么是编程语言

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有