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