簡體   English   中英

C中的靜態局部變量地址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM