new と delete と malloc と free と スタック と ヒープ

new delete と malloc free

メモリ確保解放の方法new deletemalloc freeの差

  • new delete

C++から実装
newで確保するとコンストラクタが、deleteで開放するとデストラクタが呼ばれる。

Cで実装。C++でも使える
mallocしてもコンストラクタは呼ばれない。
freeしてもデストラクタは呼ばれない。

  • 共通

ヒープ領域に確保される。
解放を忘れるとメモリリークする。

種類 Cで使えるか C++で使えるか コンストラク
デストラク
領域 解放
new
delete
使えない 使える 通る ヒープ 手動
malloc
free
使える 使える 通らない ヒープ 手動

スタック と ヒープ

メモリ領域スタックとヒープの差

  • スタック

静的領域。
コンパイル時に決定される。
なので以下のような動的な記述(配列のサイズが引数によって異なる)は出来ない

void func(int num){
	int ary[num];//エラー
}

自動で解放してくれる。
ヒープに比べて高速だが容量は少ない。

  • ヒープ

動的領域。
実行時に確保。
解放は自分で行う。
スタックに比べて容量は大きいが低速。

種類 領域確保 解放 容量 速度
スタック 静的
コンパイル時確保
自動 高速
ヒープ 動的
実行時確保
手動 低速