首頁  >  文章  >  後端開發  >  在堆疊和堆上建立物件時,對物件的參考儲存在哪裡?

在堆疊和堆上建立物件時,對物件的參考儲存在哪裡?

Linda Hamilton
Linda Hamilton原創
2024-11-27 01:52:13914瀏覽

Where are References to Objects Stored when Created on the Stack vs. the Heap?

在堆疊或堆疊上建立物件:

問題來了:在堆疊和堆疊上建立物件時,引用在哪裡那些實際儲存的對象?

在C 中,物件儲存是由它的上下文決定的,即它的儲存持續時間:

物件o 建立一個物件:

  • 自動儲存:如果在函數中本地聲明,則該物件駐留在堆疊.
  • 靜態儲存:如果在命名空間或檔案範圍聲明,則該物件被放置在堆疊或堆疊之外的專用記憶體區域
  • 成員變數:如果宣告為另一個物件中的子對象,它繼承包含物件的儲存

Object* o 建立一個具有自動儲存功能的指標。

指標像其他物件一樣在堆疊上分配。它們的儲存持續時間由上下文決定,而不是由初始化表達式決定。

例如,在下面的程式碼片段中:

struct Foo {
    Object o;
};

Foo foo, f;
Foo* p = new Foo;
Foo* pf = &f;
  • foo.o 沒有靜態存儲,也沒有在堆疊上或堆疊上,因為 foo 本身俱有靜態儲存。
  • f.o 具有自動存儲,駐留在堆疊上,因為 f 具有自動存儲存儲。
  • p->o 具有動態存儲,在堆上,因為 *p 具有動態存儲。
  • pf->o 和f.o 引用同一個對象,因為pf 直接指向to f.

綜上所述,對象存儲位置僅取決於其上下文,而指針始終分配在堆疊上,但可以引用各種物件儲存期限。

以上是在堆疊和堆上建立物件時,對物件的參考儲存在哪裡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn