簡體   English   中英

C ++中變量的內存分配

[英]Memory allocation for a variable/s in C++

大家好)我很想得到這個問題的答案:讓我分享一小部分我用 C++ 編寫的代碼:

#include <iostream>
using namespace std;

int main() {
    int* ptr;
    int var = 7;
    ptr = &var;
    cout << "var address:" << &var << endl;
    int &ref = var;
    cout << "ref address:" << &ref << endl;    
    
    cout << "Var value: " << var << endl;
    cout << "ref value: " << ref << endl;
    

    return 0;
}

寫完這段代碼后,我意識到存儲變量 var 和 ref 的地址是相等的。 這兩個變量存儲的值也相同。 但是,我只是不明白操作系統內存分配給的變量的實際數量:操作系統是分別為 ref 和 var 分配內存,還是只為這兩個(var 和 ref)分配內存中的 1 個位置變量(如果是這樣,是否意味着內存中的位置有兩個名稱/標識符(ref 和 var)?

我試圖了解內存中實際發生的事情以及它如何分配內存。 我還想知道內存系統實際上是如何設計的,因為我無法僅通過繪制方框/指針圖來理解這個問題。

引用不是對象,不具有對象的所有基本屬性,例如存儲或大小。 可能沒有存儲空間來獲取地址。 如果您嘗試獲取引用的地址或大小,您將取而代之的是獲取被引用對象的地址或被引用對象的大小。

來自https://en.cppreference.com/w/cpp/language/reference

引用不是對象; 它們不一定占用存儲空間,盡管如果有必要實現所需的語義,編譯器可能會分配存儲空間

因此,引用可能會占用可尋址存儲,但僅當實現需要該存儲來實現引用語義時(例如通過在后台使用指針)。 但這是一個實現細節。 它大部分對開發人員是隱藏的,即使在嘗試獲取其地址時仍然會提供指向所引用對象的指針。

請注意,指針是對象。 它們占用存儲空間,有一個大小,它們的地址可以用&獲取,就像一個int一樣。 這就是為什么您觀察到引用和指針的不同行為。

通常,引用是美化的指針,在使用時自動引用,在創建后不能更改為指向不同的對象,並且不允許為空。

在這種簡單的情況下,引用幾乎肯定會被優化掉,每次訪問ref都會直接替換為var

但在一般情況下,它們會像指針一樣占用存儲空間,盡管您無法輕松獲取該存儲空間的地址,因為將&應用於引用會返回目標對象的地址。

暫無
暫無

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

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