C 例項化記憶體分配問題

發布 科技 2024-05-21
5個回答
  1. 匿名使用者2024-02-11

    首先,堆和堆疊是兩個不同的東西。 堆主要用於動態記憶體分配,而堆疊主要用於函式內自動變數的空間分配。

    在 c 中,任何引用型別的變數都分配在堆上。 (特殊情況除外,例如強制宣告 stackalloc)。

    各種類都是引用型別,因此它們都在堆上分配。

    在您的示例中,有兩個變數,乙個是 c1,乙個是 c2,它們每個都有乙個成員 a,並且它們不會相互影響。

    兩者都分布在堆上,並且處於不同的位置。 所以 c1 中 a 的值是 12,c2 中 a 的值是 6,兩者之間沒有影響。

  2. 匿名使用者2024-02-10

    房東是新手(反正我也是新手,從來沒進過門),堆疊的概念就不一樣了,怎麼分配堆疊呢。

    我再說吧,如果不對,咱們再討論一下:

    首先,A 首次例項化(即 C1),然後系統為其分配一段記憶體來儲存資料(實際上,您可以在此處使用指標標記位址,int* c11=&。

    然後 A 第二次例項化(即 C2),系統為其分配一段記憶體來儲存資料;(實際上,您仍然可以在此處使用指標標記位址,int* c22=&。

    然後你呼叫,即你呼叫記憶體位址為C11的資料,即資料儲存在C11位址的記憶體中,你呼叫資料,然後輸出到螢幕上;

    然後你分配乙個值,即將記憶體位址 c22 的資料從 12 更改為 6;

    最後,呼叫輸出。

    乙個變數,當例項化兩次時,每個變數都會分配一段記憶體空間(注意:如果你不例項化,那麼系統不會為你分配記憶體)。

    如果有任何錯誤或遺漏,我希望能改正。

  3. 匿名使用者2024-02-09

    列印的結果是:

    怎麼可能是 12 和 6?尋求建議!o( ohaha 讓我們進入正題,我不會取笑你!

    每次使用 new a() 例項化物件時,都會呼叫類 A 的建構函式在堆中開啟乙個新位址(注意:每次使用它時都會開啟它)。 而且這個位址裡有乙個int變數,這個int變數的值初始化為12,修改這個int變數的值就不會再開啟新的位址了!

  4. 匿名使用者2024-02-08

    靜態記憶體分配和動態記憶體分配之間的兩個主要區別是:

    1.靜態物件是有名稱的變數,我們直接操作它們。 另一方面,動態物件是沒有名稱的變數,我們用指標間接操作它們。

    2. 靜態物件的分配和釋放由編譯器自動處理。 程式設計師需要理解這一點,但不需要做任何事情。 另一方面,動態物件的分配和釋放必須由程式設計師顯式管理,相對容易出錯,並且通過兩個表示式 new 和 delete 來完成。

    物件的動態排程可以使用新表示式的兩個版本之一來完成。 第乙個版本用於分配特定型別的單個物件。

    例如:int *pint = new int(1024);

    該表示式返回記憶體中物件的位址。 然後,此位址用於初始化指向物件品脫。

    新表示式的第二個版本,用於分配特定型別和位數的陣列。

    例如:int *pia=new int[4];

    分配了乙個包含四個整數元素的陣列。 遺憾的是,無法為動態分配的陣列的每個元素顯式指定初始值。

    當我們用完動態分配的物件或物件陣列時,我們必須顯式釋放該記憶體。 我們可以通過使用刪除表示式的兩個版本之一來做到這一點,例如,通過刪除單個物件。

    delete pint;

    delete 表示式的陣列形式為:

    delete pia;

    如果忘記刪除動態分配的記憶體,程式最終將導致記憶體洩漏。

  5. 匿名使用者2024-02-07

    與靜態相反,動態是程式執行中使用的分配,靜態是在開始時分配的。

相關回答
7個回答2024-05-21

就這樣寫吧。

public class a >>>More

3個回答2024-05-21

道路。 1:安裝金山衛士等保護軟體,有效清除系統垃圾。 >>>More

13個回答2024-05-21

其實這是乙個關於變數型別和變數函式的簡單問題,我覺得應該這樣解釋:首先,變數定義的初衷是利用我們定義的變數來滿足我們程式的需要,所以,上面你定義了變數a,那麼後面,你會用這個變數來做一些運算, 大多數情況下,它是要初始化的,所以,給出乙個對應型別的值來初始化變數,這樣以後就可以使用一些操作了, 其次,理解那句話:“你要 a 表示 5,所以你要把 a 的值賦值給 5”,其實就是變數 a 的初始化過程, 其中 a 是 int(整數),對應初始值 5,表示如下: >>>More

10個回答2024-05-21

您可以使用智慧型指標自動釋放指標。

6個回答2024-05-21

我不知道你是否對記憶體分配一無所知。

根據物件的例項化方式,如果直接例項在沒有新記憶體的情況下在堆疊上分配,則無需擔心類占用的空間在物件生命週期結束時將擁有自己的記憶體。 >>>More