6

new 运算符是否保证分配连续的堆内存块?即是

objects=new Base[1024];

在内存分配方面与

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

还是可以有差距?

4

3 回答 3

8

是的,记忆将是连续的。在分配方面,它与malloc版本相同,但有几个不同之处(对构造函数的调用,new不返回NULLmalloc不抛出异常等)。

请注意,您不能new[]deleteor混淆free,您必须使用它delete[] objects来释放内存。

于 2012-05-04T08:30:34.167 回答
3

也许。new运算符做了两件事:它调用函数,该operator new函数将返回一个连续的内存块,为所有可能的类型充分对齐(除非它没有;例如误用的放置新);然后它调用对象的构造函数,它可以做任何事情。包括分配额外的块,这些块不会与第一个块连续。

于 2012-05-04T08:40:56.123 回答
0

如果new运算符没有重载,则分配的内存块是连续的。但是如果它重载,我们不知道(一些邪恶的程序员可能已经重载了它?:D)

于 2012-05-04T10:59:50.700 回答