函数的局部变量存储在堆栈中。每次调用函数时,其局部变量都有一个不同的地址。在幕后,当我们更改变量值时,操作系统/微控制器如何知道该特定变量位于该地址?
yhived7q1#
在典型的C实现中,局部变量是相对于堆栈指针或帧指针寻址的。硬件堆栈是内存中留出的一个区域,用于在调用每个函数时维护函数的本地数据。CPU寄存器中的堆栈指针或帧指针,用于保存堆栈当前活动部分的地址。当调用函数时,堆栈指针或帧指针或两者都被调整为指向新的空间。2函数使用堆栈指针或帧指针的偏移量将数据存储在堆栈上。当编译器处理函数的源代码时,它会计划该函数堆栈上的数据布局。它知道每个对象相对于该函数堆栈帧的偏移量,并使用指针寄存器中的适当偏移量生成指令。执行程序初始加载的软件为硬件堆栈分配存储器,并初始化堆栈指针和/或帧指针以指向它。
1条答案
按热度按时间yhived7q1#
在典型的C实现中,局部变量是相对于堆栈指针或帧指针寻址的。
硬件堆栈是内存中留出的一个区域,用于在调用每个函数时维护函数的本地数据。CPU寄存器中的堆栈指针或帧指针,用于保存堆栈当前活动部分的地址。当调用函数时,堆栈指针或帧指针或两者都被调整为指向新的空间。2函数使用堆栈指针或帧指针的偏移量将数据存储在堆栈上。
当编译器处理函数的源代码时,它会计划该函数堆栈上的数据布局。它知道每个对象相对于该函数堆栈帧的偏移量,并使用指针寄存器中的适当偏移量生成指令。
执行程序初始加载的软件为硬件堆栈分配存储器,并初始化堆栈指针和/或帧指针以指向它。