MallocとNewの違い

Anonim

Malloc vs New

Oneコンピュータプログラマーを雇う際の最も一般的な面接の質問は、申請者/コンピュータプログラマーがmallocとnewの違いを説明することです。 mallocとnewはどちらもコンピュータ言語の領域に存在し、しばしばコンピュータプログラマによって動的メモリ割り当てに使用されます。

<! - 1 - >

2つの基本的な違いは、mallocはC言語に存在し、newはC ++言語の特定の機能であるということです。 Mallocは関数でもあり(プログラマにとっては実行に時間がかかる)、newは演算子プログラム(実行時間を短縮する)です。これは、リアルタイムプログラミングを行うプログラマが使用する最速の方法を選択する必要があるため、演算子newのメリットです。

<! - 2 - >

演算子newは、関数mallocとは違ってタイプセーフです。

関数mallocは、C言語のライブラリ関数です。メモリを割り当ててポインタを返すだけです。一方、演算子newは言語レベルの構造であり、メモリを割り当てて適切なコンストラクタを呼び出すことによってオブジェクトをインスタンス化することです。関数newからの関数mallocの別の違いは、mallocは宣言中に型キャストを必要とするが、前者はそうではないことである。また、関数mallocはメモリをクリアするために "free"という単語を使用し、同様の目的でnewを "delete"で使用します。

<! - 3 - >

2つの方法でも、障害やメモリーの消耗を処理する方法が異なります。関数mallocが失敗すると、NULLポインタを返します。 operator newはNULLポインタを返すことはありませんが、代わりに例外をスローすることによって失敗を示します。これは、オペレータnewにとって利点です。なぜなら、コンピュータプログラマは、newを呼び出すたびに返されるポインタをチェックする必要がなく、コンピュータプログラマがそのような例外を見逃すこともないからです。

関数mallocはオブジェクト(オブジェクトのコンストラクタと呼ばれます)を構築しませんが、operator newは作成します。新しいことのもう1つの利点は、関数mallocではできないが、演算子をオーバーロードすることができるということです。演算子newは、特定の数のオブジェクトを割り当てる必要がありますが、関数mallocは割り当てる総バイト数を指定する必要があります。

メモリはreallocを使って関数mallocを使ってサイズを変更したり、再割り当てしたりすることもできます。しかし、オペレータnewはこの機能を実行できず、オペレータの主な欠点の1つとしてカウントします。演算子newよりも関数mallocのもう1つの利点は、mallocがメモリ量を素早く拡張できることです。これはまだmallocとreallocを使用しています。同じ状況をC ++言語で行う場合、プログラマは演算子newを使用して新しいメモリチャンクを作成する必要があります。新しいメモリは変更されたサイズを持たなければならず、元のバッファからデータにコピーされます。元のバッファはコピー後に削除する必要があります。これは、プログラマにとっては遅いプロセスである可能性があります。

演算子newは、関数がvoid *を返す間に、正確なデータ型を返すことによって、関数mallocを利用します。関数mallocは、オーバーロードが可能なoperator newに比べてオーバーロードすることもできません。演算子newのもう1つの特徴は、関数mallocと比較して演算子で間違いを犯す可能性が低いことです。これは、特に多くのコードを書いている場合や、厳しいスケジュールでコードを操作している場合には、プログラマにとってプラスと見なされます。関数mallocとfreeはC ++で使用できますが、直接使用することはできません。代わりにnewとdeleteを使用することをお勧めします。要約:

1。 Mallocは関数であり、newは演算子です。 2。 NewはC ++言語の特定の機能で、mallocはC言語で使用されます。 3。 operator mallocが "free"になっている間、operator newは "delete"を返します。 "

4。関数mallocはC言語のライブラリ関数であり、演算子newはC ++言語の言語レベルの構造体です。