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