
比較表
比較基準 | 新しい | malloc() |
---|---|---|
言語 | 演算子newは、C ++、Java、およびC#の特定の機能です。 | malloc()関数はCの機能です。 |
自然 | "new"は演算子です。 | malloc()は関数です。 |
のサイズ( ) | newはsizeof演算子を必要としないので、特定の型に十分なメモリを割り当てます。 | mallocは、sizeof演算子が割り当てに必要なメモリサイズを知る必要があります。 |
コンストラクタ | 演算子newは、オブジェクトのコンストラクタを呼び出すことができます。 | malloc()は、コンストラクターを呼び出すことはできません。 |
初期化 | new演算子は、メモリを割り当てている間にオブジェクトを初期化できます。 | mallocでメモリの初期化ができませんでした。 |
過負荷 | 演算子newは過負荷になる可能性があります。 | malloc()は過負荷になることはありません。 |
失敗 | 失敗した場合、operator newは例外をスローします。 | 失敗すると、malloc()はNULLを返します。 |
割り当て解除 | newによるメモリ割り当て。 "delete"を使用して割り当て解除されます。 | malloc()によるメモリ割り当ては、free()関数を使用して解放されます。 |
再割り当て | new演算子はメモリを再割り当てしません。 | malloc()によって割り当てられたメモリは、realloc()を使用して再割り当てできます。 |
実行 | オペレータnewは実行時間を短縮します。 | malloc()は実行に時間がかかります。 |
newの定義
operator newは、メモリを動的に割り当てるメモリ割り当て演算子です。 new演算子はヒープ内にメモリを割り当て、参照変数に割り当てられているそのメモリの開始アドレスを返します。 new演算子はCのmalloc()に似ています。しかし、C ++コンパイラはmalloc()と互換性がありますが、malloc()よりも利点があるため、new演算子を使用するのが最善です。 new演算子の構文は次のとおりです。
タイプvariable_name =新しいタイプ(parameter_list);
ここで、typeは、メモリを確保する必要がある変数のデータ型を表します。 変数名は、メモリへのポインタを保持する参照変数に付けられた名前です。 ここでの括弧はコンストラクタの呼び出しを指定します。 parameter_listは、新しく構築されたオブジェクトを初期化するためにコンストラクタに渡される値のリストです。
new演算子は、特定の種類のオブジェクトに必要な十分なメモリを割り当てます。 したがって、sizeof()演算子を必要とせず、メモリを再割り当てするためにrealloc()を使用するmalloc()のようにメモリのサイズを変更する必要もありません。 new演算子は構成体です。 オブジェクトの初期化に一般的に使用される宣言中に、オブジェクトのコンストラクターを呼び出します。
new演算子がメモリをヒープに割り当て、ヒープのサイズが制限されていることがわかりました。 そのため、ヒープがメモリ不足になり、新しいオペレータがメモリを割り当てようとすると、新しいオペレータに障害が発生します。 new演算子がメモリの割り当てに失敗した場合は例外をスローし、コードがその例外を処理できない場合はプログラムは異常終了します。
newオペレーターによって割り当てられたメモリーは、deleteオペレーターを使用して解放できます。 new演算子は、関数ではなく演算子であるため、実行時間が短縮されます。
malloc()の定義
malloc()は、要求された量のメモリをヒープに割り当てるために使用される関数です。 このメソッドは 'void'型のポインタを返します。これはさらに、指定された型のメモリへのポインタを取得するための型キャストで、このメモリへのポインタは参照変数に割り当てられます。 malloc()関数は、メモリを動的に割り当てるために使用されるため、C ++のnew演算子と似ています。 malloc()は標準ライブラリ関数です。 malloc()関数の構文は次のとおりです。
type variable_name =(type *)malloc(sizeof(type));
ここで、typeは、メモリを確保する必要がある変数のデータ型を示します。 variable_nameは、malloc()によって戻されたポインターが割り当てられる参照変数の名前です。 (type *)は、特定の型のメモリへのポインタを取得するための型キャストを表します。 sizeof()はmalloc()を記述します、それはどんなメモリサイズが必要であるかということです。
malloc()が返すポインタはvoid型であるため、malloc()は型キャストが必要です。したがって、ポインタに型を割り当てるには、型キャストが必要です。 malloc()関数が生のメモリを割り当てるので、sizeof()が必要です。したがって、malloc()関数に割り当てるメモリサイズを伝える必要があります。 割り当てられたメモリが足りない場合は、realloc()を使用してサイズを変更したり、再割り当てしたりできます。
malloc()関数は、ヒープ上にメモリーを割り振ります。 その場合、ヒープのメモリが足りなくなり、malloc()関数はNULLポインタを返します。 したがって、malloc()によって返されるポインタを含む参照変数は、使用される前にチェックする必要があります。そうしないと、システムがクラッシュする可能性があります。
malloc()関数によって割り当てられたメモリは、free()を使用して解放されます。 関数呼び出しはオーバーヘッドを招くので、malloc()は実行に時間がかかります。
newとmalloc()の主な違い
- new演算子は、C ++で導入され、Java、C#などで使用される構文です。一方、malloc()は、C言語でのみ使用され、C ++でサポートされている標準ライブラリ関数です。
- new演算子は指定された型のオブジェクトに十分なメモリを割り当てるので、サイズ演算子を必要としません。 一方、malloc()関数では、sizeof()演算子を使用して、割り当てられるメモリサイズを関数に知らせる必要があります。
- new演算子は宣言中にオブジェクトのコンストラクタを呼び出すことができます。 一方、malloc()関数はコンストラクターを呼び出すことはできません。
- 演算子 'new'はオーバーロードされる可能性がありますが、malloc()はオーバーロードされる可能性はありません。
- new演算子がメモリの割り当てに失敗した場合、コードによって処理されなければならない例外をスローします。そうしないとプログラムは終了します。 一方、malloc()関数は、メモリの割り当てに失敗した場合、NULLポインタを返します。 これをチェックせずにポインタを使用すると、システムがクラッシュします。
- 新しい演算子を使用して割り当てられたメモリは、 'delete'を使用して割り当て解除できます。 一方、malloc()関数を使用して割り当てられたメモリは、free()を使用して解放できます。
- いったんメモリが新しい演算子を使って割り当てられると、とにかくサイズを変更することはできません。 一方、malloc()関数を使用して割り当てられたメモリは、realloc()関数を使用して再割り当て(サイズ変更)できます。
- mallocは関数で、newはコンストラクトであるため、newの実行時間はmalloc()に比べて短くなります。
結論:
malloc()関数は、メモリを動的に割り当てるための古い方法です。 最近では、new演算子はmalloc()よりも優れているため、実行時にメモリを割り当てるために使用されます。