6

新しい演算子は、ヒープメモリの連続チャンクを割り当てることが保証されていますか?つまり、

objects=new Base[1024];

メモリ割り当てに関しては、

objects=(Base*)malloc(1024*sizeof(base));

またはギャップがある可能性がありますか?

4

3 に答える 3

8

はい、メモリは継続的になります。割り当てに関しては、バージョンと同じmallocですが、いくつかの違いがあります(コンストラクターの呼び出し、返さnewない、例外をスローしないなど)。NULLmalloc

new[]またはと混同することはできないことに注意してくださいdelete。メモリを解放するfreeために使用する必要があります。delete[] objects

于 2012-05-04T08:30:34.167 に答える
3

多分。演算子は2つのnewことを行います。operator new関数を呼び出します。この関数は、考えられるすべてのタイプに対して適切に配置された、連続したメモリブロックを返します(そうでない場合を除きます。たとえば、誤って配置された新しい配置など)。次に、オブジェクトのコンストラクターを呼び出します。コンストラクターは、ほぼすべてのことを実行できます。最初のブロックと隣接しない追加のブロックの割り当てを含みます。

于 2012-05-04T08:40:56.123 に答える
0

演算子がオーバーロードされていない場合new、はい、割り当てられたメモリブロックは連続しています。しかし、それが過負荷になっている場合、私たちは知ることができません(一部の邪悪なプログラマーがそれを過負荷にした可能性がありますか?:D)

于 2012-05-04T10:59:50.700 に答える