以汇编揭秘编程语言的本质

2022-04-01 #汇编

TO BE CONTINUED

以汇编的角度理解 C++ | 深入浅出

变量的分配

在C++中,局部变量通常存储在栈(stack)上。栈是一种后进先出(LIFO, Last In First Out)的数据结构,专门用于存储局部变量和函数调用信息。以下是变量在栈上的存储过程:

  1. 变量声明:当声明一个局部变量时,编译器会在汇编代码中生成相应的指令,以便在栈上分配内存。例如:

    1
    int a = 10;
  2. 分配栈空间:编译器会生成指令,调整栈指针(Stack Pointer, SP),在栈上分配适当的空间。例如,对于上面的int a = 10;,编译器可能生成以下汇编代码(假设使用的是x86汇编):

    1
    sub esp, 4    ; 在栈上分配4字节的空间给变量a
  3. 初始化变量:编译器会生成代码,将变量的值复制到分配的栈空间中。例如,将10复制到变量a的地址中:

    1
    mov DWORD PTR [esp], 10   ; 将10存储到栈指针esp所指向的地址 ; int32位 , 此处dword = 4bytes = 32bits
  4. 访问变量:当你在代码中访问变量时,编译器会生成指令,从栈中取出该变量的值。例如:

    1
    int b = a;

    对应的汇编代码可能是:

    1
    2
    3
    mov eax, DWORD PTR [esp]   ; 将变量a的值取到寄存器eax中
    sub esp, 4 ; 在栈上为变量b分配空间
    mov DWORD PTR [esp], eax ; 将eax的值存储到栈中,作为变量b的值
评论
分享

评论