指针swap 汇编
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;
SP=SP+8;
void swap(int* ap,int* bp)
{
int tmp;
tmp=*ap;
*ap=*bp;
*bp=tmp;
}
栈结构
bp
ap
saved pc
temp
<swap>:
SP=SP-4;//SP指向tmp
R1=M[SP+8];//读取int a的地址
R2=M[R1];//读取a的值
M[SP]=R2;//tmp=*ap
R1=M[SP+12];
R2=M[R1];//读取b的值
R3=M[SP+8];//读取a的值
R3=R2;//a=b
R1=M[SP];//读取tmp
R2=M[SP+12];//读取b的地址
M[R2]=R1;//b=a
SP=SP+4;
RET;//RET取出SP指向的值写入saved PC并让SP指向saved PC
引用 swap 汇编
void swap(int& a,int& b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
函数栈
b
a
saved pc
tmp
引用:指针自动解引用
int x;
int y;
x=11;
y=17;
swap(x,y);//x,y必须为左值
this指针
某个类调用方法时会将this指针作为第0个参数传入
预处理器
定义全局变量
#define w 480
#define h 720
printf("widthis %d\n",w);
int area=w*h;
预处理器处理define和include
处理define用的哈希表,然后对代码里的w和h替换