簡體   English   中英

當我聲明一個引用變量時,堆棧會發生什么? C ++

[英]What happen to stack when i declare a reference variable? C++

當我聲明一個變量時,它將在堆棧中的某個內存索引處分配,對嗎?

但是當我聲明一個引用變量時,它將指向另一個變量的相同索引,因此不必在堆棧中分配新的空間。

C ++如何處理這種情況?

我的意思是說,它有一個包含名稱和索引之間的關聯的表?

編譯器完成所有工作嗎?

我希望清楚一點...如果有人有一些手冊或相關內容,我將非常高興!

謝謝所有人,如果我用不好的英語寫的話,抱歉!

C ++標准未指定ABI,因此這是實現定義的。 但是通常的方法是將引用實現為指針,因此將指針分配在堆棧上。 但是,如果此引用未在任何地方傳遞,則可以對其進行優化,並僅用其指向的變量替換即可。

在典型的實現中,變量的分配取決於聲明方式和聲明位置。

通常,將在函數外部定義的變量放置在內存的一個區域中(堆棧或堆均無)。 常量可以放在其他區域或可執行文件中。

在函數內部定義的非static變量可以在堆棧上分配。 它們可以放在寄存器中而不是堆棧中。 取決於編譯器和優化設置。 變量可以被“優化掉”,而不存在於最終的可執行文件中。

許多編譯器將引用視為指針。 因此,當您通過引用傳遞變量時,編譯器可能會通過指針傳遞。

C ++ 14 [dcl.ref] / 4說:

未確定參考是否需要存儲

對於int a; int &b = a;這樣的情況int a; int &b = a; int a; int &b = a; 實際上,編譯器可能只是在編譯時在其標識符表中存儲了兩個都引用相同地址的標識符。 此處可能不需要額外的運行時存儲。 確實,C ++的規則說int b; int &a = b; int b; int &a = b; 結果完全一樣。

當函數通過引用接受參數時:如果編譯器無法通過函數調用進行優化,則可能會傳遞一個地址。

暫無
暫無

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

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