据我所知,当进程分配局部变量时,它是通过将它们作为堆栈推送到内存中来实现的,但仍通过使用堆栈指针的偏移量来引用它们(作为该线程的随机存储器)来访问它们(从该线程开始)将堆栈用于局部变量的想法是什么?)。
但是,如何知道哪些变量具有什么偏移量?我在以正确的方式思考吗?
局部变量的偏移量作为常量“放入”机器代码中。到编译器完成时,程序中称为局部变量的内容将替换为编译器分配的固定内存偏移量。
假设您声明了三个局部变量:
char a[8];
int b;
short c;
编译器将偏移量分配给以下变量:a
处于offset处0
,b
处于offset处8
,并且c
处于offset处12
。假设您的代码可以b += c
。编译器将此转换为如下所示的代码块:
LOAD @(SP+8)
ADD @(SP+12)
STORE @(SP+8)
唯一更改的值是SP
(堆栈指针)。所有偏移量都是数字常量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句