C:malloc
calloc
は、メモリを割り当てるための基本的な方法はC
です。
- malloc関数は:これは、任意の値に初期化することなく、要求されたサイズに応じて初期化されていないメモリを割り当てる
- のcalloc:
malloc
とほぼ同じ、プラスそれはまた、ゼロに初期化(0)。どちらの場合も
、あなたが何かを必要と:
- 割り当てのために要求されたメモリのサイズは、初期化時に与えられるべきで、それが
realloc
とともに増加することができます。
- 割り当てられたメモリ誰かがあなたがメモリ大規模な多くの作業を行っているとき
free
は非常に便利ですが、割り当てられたメモリを解放するために良い思い出を持っていない場合、時にはそれがOOM
エラーになることができ、free
で削除する必要があります。
NOTE
:new
とdelete
、new
とdelete
沿っもmalloc
とcalloc
あり(無料、あまりにも再割り当て)++ Cを考えることができます:Casting
とsize
は(メモリを割り当てるため)malloc
とcalloc
C++で必要とされますメモリを割り振りそして解放する現代的な方法としてであるがOOP's
の言語のnot all
は両方を持っている。例えばjava
はdelete
を持たない。
new
あなたはparameterize
、default
またはコピーコンストラクタを使用して初期値を設定するためのさまざまなシナリオを持っている場合objects
と協力しながら、それはかなり便利ですので、デフォルト値を初期化するコンストラクタを使用しています。
NOTE
:new
を使用すると、malloc
とcalloc
と割り当てのためのメモリサイズを与える必要はありませんとは異なり、適切なケーシングを行う必要はありません。 1つ少ないこと、右。
delete
がメモリを解放するために使用される、いくつかのオブジェクト上のdelete
コールはまた、あなたが、現在の状態などを保存するなど、いくつかの別れの作業を行うことができ、そのオブジェクトのライフサイクルの最後の場所であるdestructor
を呼び出しますメモリが解放されます。
Note
:C#
とjava
でメモリのdeallocation
はrelease
にメモリ管理がmemory.Itはそのメモリへの参照変数の指示がない場合、メモリを解放するmark-sweep
等various algos
を使用したりしGarbage-Collector
によって処理され参照変数の値はnullに設定されます。
もはや必要とされているメモリに、そのオブジェクトを指す参照変数がある場合にもmemory leak
につながる可能性があります。
GCの欠点は、これが
異なる言語、異なるオペレータ、異なる意味(ここで重要なことである、 'これらの言語でnew'だけのメモリを割り当てるだけではありません)物事が遅くなり、です。 –
私は[なぜJavaがなぜ新しいものを必要とするのか](http://stackoverflow.com/questions/6340535/is-the-new-keyword-in-java-redundant)に疑問を抱いています。通常の非批准的な答えは "because C++"です(面白いのは、C++の 'new'はコードの匂いがしばしばです)。ある時点では、Javaのデザイナーはそれが良いアイデアだと思っていました(私はそれが確信しています)。そしてC#のデザイナーはおそらく "Javaのため"でした。 – juanchopanza
私は根拠があるとは思わない。 StroupstrupはそれがCでどのように行われたかを見て、 "ねえ、これはかなりばかげている"と思った。そして、次に彼は "私は何か眠りにつくことができると確信している!"と思った。バグの潜在能力を最大限に引き出すためのプログラミング言語の設計があります。実際には、new、new []、delete、およびdelete []の4つの演算子があります。あなたが好きなようにそれらを混ぜる。そして、アプリケーション・プログラマーがオーバーロードする可能性があります。 JavaとC#はC++の演算子名をコピー/ペーストするだけです。また、ガベージコレクションがあるので、削除については気にしません。 – Lundin