编程范式11 笔记

指针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替换

你可能感兴趣的:(编程范式)