[英]static local variable address in C
我知道在程序的生命周期中存在一個靜態局部變量。 但靜態局部變量是否保持相同的內存地址?
或者編譯器是否確保它存在並且可以在本地范圍內訪問?
在C對象中,它們在其生命周期內不會移動。 只要存在對象,它就具有相同的地址。
具有靜態存儲的變量(這包括將塊作用域聲明為static
變量)具有覆蓋程序整個執行的生命周期,因此它們具有常量地址。
是的,每個靜態變量的地址偏移量在編譯時都是已知的。 當二進制文件加載到內存中時,局部變量存儲在程序地址空間的.data段中。
換句話說,靜態變量的地址在代碼執行期間不會改變。
局部static
s和常規全局變量之間幾乎沒有區別。
int x = 42; //static lifetime, external name
static int y = 43; //static lifetime, no external name,
//referencable in all scopes here on out
//(unless overshadowed)
int main()
{
static int z = 44; //like y, but only referencable from within this scope
//and its nested scopes
{
printf("%p\n", (void*)&z));
}
}
一旦程序被鏈接和加載,所有這些都具有固定的地址。
局部靜態就像全局變量一樣,除了它們只能在它們的范圍和它的嵌套子范圍內引用(通過它們的名字)。 (您可以通過指針從不相關的范圍引用它們。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.