簡體   English   中英

C++ 中存儲的變量或標識符到底在哪里?

[英]Where exactly are variables or identifiers stored in C++?

根據我目前的知識,變量(標識符)指向特定類型(int、bool 等)的 object,它們是 memory 中的對象。 變量本身存儲在哪里以及如何存儲? 它們是與它們指向的對象一起存儲還是存儲在其他地方?

例如;

int main()
{
    int a_number = 2;
    return 0;
}

所以變量a_number指向memory中的一個int object,但是a_number本身在哪里?

如果說 2 在 4 字節 memory 中,a_number 是否消耗了它的一部分? 還是 a_number 在某處消耗其他分配的 memory?

順便說一句,我目前正在學習 C++(我是編程的初學者),我正在考慮這一點,但無法真正想象它。 謝謝你。

在這種特殊情況下, a_number命名一個int object,它消耗sizeof(int)個字節並具有自動存儲持續時間。 Memory 用於具有自動持續時間的存儲通常分配在聲明所屬的 function 的堆棧幀中(在本例中為main() )。

a_number實際上成為存儲在這些字節中的int object 的名稱。 該名稱在運行時不存在,因為那時不再需要它。 該名稱的唯一目的是允許您在代碼中引用 object。

但是a_number本身在哪里?

就在你看到它的地方,在源代碼文件中。 編譯器在那里看到它並跟蹤它,生成它需要的代碼。 如果您打開了調試,則符號與代碼一起存儲在一個特殊的查找表中,因此您也可以在調試器中看到它。

變量可以存儲在 memory 區域或處理器寄存器中,具體取決於編譯器和優化設置。

假設您的編譯器正在使用 function 局部變量和參數的堆棧 您的a_number變量將被放置在堆棧上,因為它的生命周期是臨時的(執行離開函數后將消失)。

允許編譯器將a_number放入處理器register 在這種情況下,變量在 memory 中不存在,因為處理器寄存器不在 memory 中(它們沒有地址)。

由於您的程序在聲明后沒有使用a_number變量,因此編譯器可以消除該變量而不使用 memory。 有或沒有變量,程序的行為沒有區別; 因此編譯器可以消除變量。

變量的位置取決於您的編譯器。 您的編譯器可以將變量存儲在“堆棧上”、處理器寄存器中或消除變量。 該位置還取決於編譯器上的“優化設置”。 一些編譯器可能不會在最低設置上進行優化,並在較高設置上刪除變量。

暫無
暫無

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

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