编程范式(斯坦福大学)学习笔记《十一》

本文通过对比C和C++代码生成的汇编代码,探讨了两种语言在底层实现上的相似性。重点讨论了引用的概念,指出引用实际上是地址传递的另一种方式,虽然在汇编层面与指针类似,但引用一旦绑定不能重新赋值。此外,解释了结构体和类在内存中的存储方式,以及静态成员函数的特点和作用。最后,概述了编译过程,包括预处理、编译、链接和生成可执行文件的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上次的课中都是使用C代码生成汇编代码,这次课中将使用C++代码生成汇编代码,对比结果发现这两种语言最终生成的代码形式很像。

 


C语言版本:

void foo()
{
    int x;
    int y;
    x=11;
    y=17;
    swap(&x,&y);
}

对应的汇编代码:

SP=SP-8;
M[SP+4]=11;
M[SP]=17;
R1=SP;//&y
R2=SP+4;//&x
SP=SP-8;
M[SP]=R2;
M[SP+4]=R1;
CALL<swap>;
SP=SP+8;//与第6行代码抵消
SP=SP+8;//与第1行代码抵消
RET;

活动记录示意图:

注意:

1.Saved PC中关联着调用foo的函数的相关信息,在其他某个函数的汇编指令流中会有一条call foo指令,saved PC的值就是直接位于这条call指令之后的指令地址。

2.在函数内部,在返回之前栈指针需要指向刚刚进入函数时的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值