[解決済み】new/deleteとmalloc/freeの違いは何ですか?
2022-04-17 20:41:40
質問
とはどのような違いがあるのでしょうか?
new
/
delete
と
malloc
/
free
?
関連(重複?) どのような場合にmallocとnewを使い分ければよいのですか?
どのように解決するのですか?
new
/
delete
-
メモリの確保・解放
- フリーストア」から割り当てられたメモリ。
- 完全型付けされたポインタを返します。
-
new
(標準バージョン) は決してNULL
(失敗すると投げます)。 - Type-IDで呼び出される(コンパイラがサイズを計算する)。
- 配列を明示的に処理するバージョンがある。
- コピーコンストラクタのため)直感的に処理できない再割り当て(より多くのスペースを得るために)。
-
を呼び出しているかどうか。
malloc
/free
は実装で定義されています。 -
メモリ不足に対応するため、新しいメモリアロケータを追加できる (
std::set_new_handler
). -
operator new
/operator delete
は、合法的に上書きすることができます。 - オブジェクトの初期化/破棄に使用されるコンストラクタ/デストラクタです。
malloc
/
free
-
メモリの確保・解放
- ヒープ'から割り当てられたメモリ。
-
を返します。
void*
. -
リターン
NULL
を返します。 - 必要なサイズをバイト数で指定する必要があります。
- 配列の割り当てには、手動で容量を計算する必要があります。
- より大きなメモリチャンクの再割り当てが簡単(コピーコンストラクタの心配がない)。
-
以下のようになります。
しない
コール
new
/delete
. - メモリ不足を解消するために、ユーザーコードを割り当てシーケンスに割り当てる方法がない。
-
malloc
/free
可 NOT は合法的に上書きされます。
機能の表比較。
<テーブル
特徴
new
/
delete
malloc
/
free
メモリ割り当て元
'フリーストア'
'ヒープ'
戻り値
完全型ポインタ
void*
失敗時
を投げる(決して返さない
NULL
)
戻り値
NULL
必要なサイズ
コンパイラで計算される
バイト単位で指定する必要があります
配列の取り扱い
明示的なバージョンを持つ
手動で計算する必要がある
再割当
直感的に扱えない
シンプル(コピーコンストラクタなし)
リバース呼び出し
実装定義
いいえ
メモリ不足の場合
新しいメモリアロケータを追加することができます
ユーザーコードで処理されない
オーバーライド可能
はい
いいえ
コンストラクタ/デストラクタの使用
はい
いいえ
で確保されたメモリは、技術的には
new
が割り当てたメモリは「フリーストア」から来るのに対して
malloc
は「ヒープ」から来る。この2つの領域が同じかどうかは、実装の詳細であり、それがまた
malloc
と
new
を混在させることはできません。
関連
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】C++の余分な資格エラー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された