C++メモリの割り当てと管理
3035 ワード
一、C/C++の四つの基本関数 malloc:指定バイト数のメモリを申請し、申請したメモリの初期値が不確定です. calloc:指定された長さのオブジェクトに、指定された数のメモリを格納できるメモリを割り当て、各ビットを0に初期化します. realloc:以前に割り当てられたメモリの長さを変更し、長さを増やすと、コンテンツを別の十分な領域にコピーする必要がある場合がありますが、新規領域の初期値は不確定です. alloca:スタックでメモリを申請し、プログラムがスタックを出ると自動的にメモリが解放されます.allocは移植性を備えておらず,従来のスタックのない機器では実現しにくい.
サンプルコード:
二、C++中new/delete new/new[]:malloc割り当てメモリを最下位レベルで呼び出し、コンストラクション関数を呼び出します. delete/delete[]:まず構造関数を呼び出し、最下位でfree解放空間を呼び出す. newはメモリを申請するときに必要なバイト数を自動的に計算しますが、mallocは申請メモリのバイト数を入力する必要があります.
サンプルコード:
三、new/deleteとmalloc/freeの10つの違いをまとめる
とくせい
new/delete
malloc/free
メモリ位置の割り当て
じゆうきおくいき
スタック
正常な戻り値の割当て
タイプポインタ
void*(ポインタタイプ強制変換が必要)
割当てに失敗した戻り値
デフォルト投げ出しbac_alloc異常
NULLを返します
メモリサイズの割り当て
コンパイラタイプに基づいて計算
指定したバイト数を表示する必要があります
配列の処理
new[]
バイト数表示指定の計算
割り当てられたメモリの拡張
直観的に処理できない
realloc関数の使用
相互呼び出し
はい、具体的なoperator new/delete実装を見てください.
呼び出し不可new
メモリの割り当て時にメモリ不足
ユーザーは、処理関数を指定したり、ディスペンサを再指定したりできます.
ユーザーコードで処理できません
関数の再ロード
許可する
許可しない
コンストラクション関数とコンストラクション関数
よびだし
呼び出しなし結論:C++はオブジェクト向けのプログラミングに重点を置き、new/delete を使用するのに適している.
サンプルコード:
#include
// 100
char *str = (char *)malloc(100);
assert(str != nullptr);
//
free(str);
str = nullptr;
二、C++中new/delete
サンプルコード:
T* t = new T(); // ,
delete t; // ,
三、new/deleteとmalloc/freeの10つの違いをまとめる
とくせい
new/delete
malloc/free
メモリ位置の割り当て
じゆうきおくいき
スタック
正常な戻り値の割当て
タイプポインタ
void*(ポインタタイプ強制変換が必要)
割当てに失敗した戻り値
デフォルト投げ出しbac_alloc異常
NULLを返します
メモリサイズの割り当て
コンパイラタイプに基づいて計算
指定したバイト数を表示する必要があります
配列の処理
new[]
バイト数表示指定の計算
割り当てられたメモリの拡張
直観的に処理できない
realloc関数の使用
相互呼び出し
はい、具体的なoperator new/delete実装を見てください.
呼び出し不可new
メモリの割り当て時にメモリ不足
ユーザーは、処理関数を指定したり、ディスペンサを再指定したりできます.
ユーザーコードで処理できません
関数の再ロード
許可する
許可しない
コンストラクション関数とコンストラクション関数
よびだし
呼び出しなし