new 运算符是否保证分配连续的堆内存块?即是
objects=new Base[1024];
在内存分配方面与
objects=(Base*)malloc(1024*sizeof(base));
还是可以有差距?
是的,记忆将是连续的。在分配方面,它与malloc
版本相同,但有几个不同之处(对构造函数的调用,new
不返回NULL
,malloc
不抛出异常等)。
请注意,您不能new[]
与delete
or混淆free
,您必须使用它delete[] objects
来释放内存。
也许。new
运算符做了两件事:它调用函数,该operator new
函数将返回一个连续的内存块,为所有可能的类型充分对齐(除非它没有;例如误用的放置新);然后它调用对象的构造函数,它可以做任何事情。包括分配额外的块,这些块不会与第一个块连续。
如果new
运算符没有重载,则分配的内存块是连续的。但是如果它重载,我们不知道(一些邪恶的程序员可能已经重载了它?:D)