C C 動態記憶體管理方式的區別

2021-10-03 21:43:47 字數 1891 閱讀 4546

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 該函式會將申請的記憶體空...