假设您有一个带有静态字段 int mstatic 的 A 类。 想象一下,如果那个类有一个修改 mstatic 的方法 mymethod。编译mymethod时,如何知道mstatic的地址?我知道在非静态字段的情况下,指向调用对象(著名的“this”)的指针被隐式传递给该方法,因此它用于查找地址,但我们如何处理静态字段?
最佳答案
静态字段的分配类似于 namespace 范围或全局变量...基本上有一个或两个区域(需要 0 初始化的变量可能与需要初始非 0 值的变量分开)在翻译中顺序填充所有此类变量单元。如果变量在另一个变量中定义,地址将在链接或加载期间被修补。请注意,地址通常是有效的硬编码(固定地址,可能来自特定数据段寄存器),不像堆栈(它可能是堆栈寄存器相关的,但堆栈寄存器随着函数被调用和返回而被修改,不像数据段寄存器可以在线程运行时设置为相同的值)或堆托管变量(其中地址在 malloc
或 new
期间确定。
关于c++ - 编译器如何知道静态字段分配在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28037957/