第1章 C++引论

1.1 计算机体系结构

1.1.1计算机体系结构

冯诺伊曼体系

计算机体系结构详解

计算机的内存以字节为单位编排地址,最小存储单元存储一个字节。

Windows分配内存的最小单位为1节 = 16字节。

C/C++程序被编译成机器指令程序后,将被加载到不同的内存片段进行管理,包括代码段、数据段、堆段、栈段。

32位编译系统下,代码段用于存放二进制格式的机器指令,数据段用于存储全局变量、单元变量或者静态变量,栈段用于函数传递实参给形参,堆段用于动态内存的应用。

C++程序在64位编译模式下,优先使用寄存器传递函数参数的值,寄存器用完再使用栈传递。

1.1.2数据与机器指令的解析

        内存中数据和指令无法区分,数据可以当作指令看待,指令也可以当作数据看待,当指令计数器指向某个计数地址,自此开始的地址的数据被当作指令执行。

1.2 为什么使用二进制

        从节省电路元件的角度,理论计算出使用自然对数e时最节省,最接近e的自然数是3,但2进制也很经济,且更稳定,所以用二进制。

        突然联想到一个点,连续3个异或运算可交换两个变量x、y的值:x=x^y;y=x^y;x=x^y;

1.3 80x86系列汇编语言

        C++可编译为汇编程序:

        C++函数编译形成代码段CS, C++全局和静态变量编译形成数据段DS,C++函数参数和局部自动变量编译后存于栈段SS。

        C++函数返回的int值存储在通用寄存器EAX中,返回的double值存储在EAX+EDX中,返回的对象值则实现起来很复杂。

        C++函数的参数通过压栈完成传递,调用完成后实参的值出栈,保持函数调用前后栈指针的值不变或平衡。函数局部自动变量通过在栈上内存实现。

        C++的变量名和函数名编译为汇编程序的变量名和函数名时,编译结果通常包含变量、函数(包括参数和返回值)的类型信息。

        从C++程序编译得到的汇编程序在执行函数体前,通常会在栈上保存重要寄存器的值,返回前会从栈上出栈恢复这些重要寄存器的值,此类开销被称为调用开销。相对于编译得到的函数体汇编指令,调用开销有时较大。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值