第一章 C++引论

发布时间:2024年01月17日

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

文章来源:https://blog.csdn.net/qq_43010742/article/details/135642947
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。