簡體   English   中英

例如,在C中定義變量時,存儲該變量的內存地址在哪里?

[英]When defining a variable in C for example, where is the memory address for that variable stored?

如果我在C中定義一個變量(即unsigned short int n = 5),那么該值將以二進制形式存儲在用戶RAM的某處(在這種情況下,它看起來像0000 0000 0000 0101)。 存儲該值的位置具有也是二進制的地址。 (即,值5可以存儲在例如0010處,這意味着它在RAM中使用0010和0011,因為它使用2個字節)。 變量n的名稱表示存儲該值的內存地址。 存儲的內存地址在哪里? 那會不會占用更多的公羊? 如果確實如此,那么該地址也不必有地址嗎?

變量的內存地址不直接存儲在內存中。 它是訪問變量的代碼的一部分。 根據具體情況,它可以是偏移量(距離已知位置的距離 - 例如局部變量的堆棧指針,全局變量可能是程序計數器)或絕對地址(僅適用於全局變量)。

如果您希望變量存儲變量的地址,那么是的,您也需要該變量的內存。 這種類型的變量稱為指針。

它取決於幾個因素,例如分配方法(堆棧或靜態),如何訪問變量,但讓我們假設這段代碼:

static int n = 5;
printf("%p\n", &n);

在這種情況下, n的地址存儲在代碼段中,其中調用printf 如果您反匯編代碼,您將在調用printf之前找到push指令,將地址推送到堆棧。 被推送的地址是n的地址(它是被推送的兩個地址之一,也有格式字符串)。

正如我上面所說,它並不總是一樣的。 不同的體系結構和編譯標志(例如-fpic )可以改變它。
此外,如果變量在堆棧上,或者對它的引用不是來自代碼,而是來自數據(例如int n=5; int *p = &n; ),則事情會發生變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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