c++動態記憶體管理方式
知識點習題
malloc/calloc/realloc和free
**示例
void test (
)
1. malloc/calloc/realloc的區別是什麼?
解答:
void
*malloc
(size_t)
;// 要申請空間的位元組數
void
*calloc
(size_t, size_t)
;// 第乙個引數申請的元素個數;第二個引數是單個元素型別的大小
void
*realloc
(void
*, size_t)
;void
*free
(void*)
;
malloc 開闢空間不會進行初始化
calloc 會初始化空間為0
realloc 是將p指向的空間調整到size的位元組(當第乙個引數傳入null的時候和malloc一樣)
假設:p 指向的空間原來的大小為 oldsize 位元組
size > oldsize:需要將 p 指向的空間擴增到 size 個位元組。
開闢新空間
拷貝元素
釋放舊空間
返回新空間
2.這裡需要free(p2)嗎?
解答:
這裡不需要free(p2);
realloc的操作步驟如下:
申請size個位元組的空間
將 p 中的值拷貝到剛申請的空間中
釋放 p,返回剛申請的空間
c語言記憶體管理方式在c++中可以繼續使用,但有些地方就無能為力而且使用起來比較麻煩,因此c++又提出了自己的記憶體管理方式:通過new和delete操作符進行動態記憶體管理。
new/delete操作內建型別
void
test()
注意:
new和delete操作自定義型別
class
test
~test()
private
:int _data;};
void
test2()
void
test2()
注意:在申請自定義型別的空間時,new會呼叫建構函式,delete會呼叫析構函式,而malloc與free不會。所以在給類分配空間時,最好使用new/delete
malloc函式進行記憶體分配是在什麼階段?
a. 編譯階段
b. 鏈結階段
c. 裝載階段
d. 執行階段
正確答案d
答案解析
程式占用三種型別的記憶體:靜態記憶體、棧記憶體、堆記憶體;
用來儲存區域性static物件、類static資料成員以及定義在任何函式之外的變數
用來儲存定義在函式內的非static物件。
分配在靜態記憶體或棧記憶體中的物件由編譯器自動建立和銷毀。對於棧物件,僅在其定義的程式塊執行時才存在;static物件在使用之前分配,在程式結束時銷毀。
在程式執行時分配。動態物件的生存週期由程式(使用者)來控制。
C C 動態記憶體管理的區別
malloc 位元組 申請 calloc 數量,每個位元組大小 申請並初始化為0 realloc 擴充套件或者壓縮 realloc 擴充套件可能導致位置改變,所以要重新接收,壓縮會截尾 free 釋放,malloc介面 申請 free釋放 int arrary int malloc nsizeof ...
C語言中動態記憶體管理方式。
c語言中關於動態記憶體管理的方式有三種,他們分別是malloc,calloc.realloc,雖然說他們都可以進行動態記憶體申請,但是他們之間還有一些相同之處,和不同之處。下面我們可以簡要的說明一下 三個函式的宣告分別是 void malloc size t size 1 函式malloc 在記憶體...
C C 動態記憶體管理
一 c語言中動態記憶體管理方式 c語言中使用 malloc calloc realloc free進行記憶體的管理和釋放 1.malloc動態記憶體申請 int ptest int malloc 10 sizeof int 申請記憶體的方式 free 釋放 2.calloc 該函式會將申請的記憶體空...