想象一下,你有一个带有静态字段int mstatic的A类。 想象一下,如果该类有一个修改mstatic的方法mymethod。在编写mymethod时,如何知道mstatic的地址?我知道在非静态字段的情况下,指向调用对象(着名的“this”)的指针被隐式传递给方法,因此它用于查找地址,但我们如何处理静态字段?
答案 0 :(得分:2)
静态字段的分配方式类似于命名空间范围或全局变量...基本上有一个或两个区域(需要0初始化的变量可以与需要初始非0值的变量分开)依次填充翻译中的所有这些变量单元。如果变量在另一个变量中定义,则在链接或加载期间将修补该地址。注意,地址通常是有效的硬编码(固定地址,可能来自特定的数据段寄存器),不像堆栈(可能是堆栈寄存器相对,但堆栈寄存器被修改为函数被调用并返回,与数据段寄存器不同)在线程运行时可以设置为相同的值)或堆托管变量(在malloc
或new
期间确定地址。