C 動態分配記憶體的好處

2021-10-06 05:25:03 字數 1025 閱讀 5070

例項化乙個類有兩種方式:

// 假設有乙個類a

// 方式一:直接定義法

a a;

// 方式二:動態記憶體分配法

a * a = new a();

兩者有什麼差別呢?

實際上,方式二即等價於如下**:

a * a = new a();

等價於a * a;

a = new a();

方式一就是直接將a放入棧區(區域性變數,大小受限,自動釋放);

方式二則是在堆區(動態記憶體,大小任意,手動釋放)分配一塊記憶體,然後用指標a去指向這塊記憶體;

那麼我們很容易就知道為什麼要使用動態記憶體分配來例項化乙個類。

原因:

1.可以動態的申請空間,以便動態確定物件所需要的記憶體;

2.便於儲存大型物件,通常情況下棧區的大小容不下過於龐大的物件;

3.傳遞指標比傳遞整個物件更方便高效;(當然對於乙個變數也可以取位址,但是臨時變數的位址是不能長久使用的,特別是返回臨時變數的位址是大忌)

4.同時傳遞指標可以便於大家共同維護乙個空間,指標在傳遞的過程中,大家都可以修改指標指向的內容,當然要加鎖進行保護,這樣一處修改,處處修改,否則就要設定全域性的變數,大家統一修改使用;

舉幾個生動形象的例子解釋以上三條原因:

1. 每個人都要吃鹽,鹽不夠了再去買顯然比把這輩子要吃的鹽一次性買下來要明智;

2. 如果你是賣鹽的,儲存了很多鹽,你只需要建乙個倉庫把鹽放進去,然後自己記住倉庫位址即可,而不需要把鹽全部放在自己的家中;

3. 如果要去很遠的地方談賣鹽的生意,只需要選一些有代表性的資訊(位址)給對方就可以了,不需要把整個倉庫搬過去給對方看。

4.比如a,b,c三個人一起賣鹽,然後都知道倉庫的位址,然後a賣的時候,知道位址就可以把鹽取走,倉庫裡的鹽變少了,這樣b和c的倉庫都被修改了,這樣就達到了乙個一處修改,處處修改,如果不是指標,而是給三個人都有乙個全量的倉庫,那麼乙個修改,另外兩個不會修改。想到達統一,就得乙個人修改,後再通知另外兩個鹽變少了多少。

記憶體動態分配

陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...

動態分配記憶體

動態記憶體分配即分配記憶體大小在執行時才確定,一般在堆中分配。c語言動態記憶體分配相關的函式。include void malloc size t size malloc的使用比較直接,乙個成功的malloc呼叫返回分配的size大小的記憶體的指標。失敗時返回null並將錯誤 置為enomem。教材...

動態分配記憶體

動態分配記憶體 動態分配記憶體也可以分配儲存區,這種方式可以在程式執行的時候臨時決定分配的儲存區大小 為了管理動態分配的記憶體,就需要使用一組標準函式 為了使用這些標準函式,需要包含stdlib.h標頭檔案 malloc 函式可以動態分配一組連續的位元組 這個函式需要乙個整數型別引數表示分配的位元組...