TO BE CONTINUED
以汇编的角度理解 C++ | 深入浅出
变量的分配
在C++中,局部变量通常存储在栈(stack)上。栈是一种后进先出(LIFO, Last In First Out)的数据结构,专门用于存储局部变量和函数调用信息。以下是变量在栈上的存储过程:
变量声明:当声明一个局部变量时,编译器会在汇编代码中生成相应的指令,以便在栈上分配内存。例如:
1
int a = 10;
分配栈空间:编译器会生成指令,调整栈指针(Stack Pointer, SP),在栈上分配适当的空间。例如,对于上面的
int a = 10;,编译器可能生成以下汇编代码(假设使用的是x86汇编):1
sub esp, 4 ; 在栈上分配4字节的空间给变量a
初始化变量:编译器会生成代码,将变量的值复制到分配的栈空间中。例如,将10复制到变量
a的地址中:1
mov DWORD PTR [esp], 10 ; 将10存储到栈指针esp所指向的地址 ; int32位 , 此处dword = 4bytes = 32bits
访问变量:当你在代码中访问变量时,编译器会生成指令,从栈中取出该变量的值。例如:
1
int b = a;
对应的汇编代码可能是:
1
2
3mov eax, DWORD PTR [esp] ; 将变量a的值取到寄存器eax中
sub esp, 4 ; 在栈上为变量b分配空间
mov DWORD PTR [esp], eax ; 将eax的值存储到栈中,作为变量b的值
评论