C ++ new operator - 内存布局

时间:2012-05-04 08:30:03

标签: c++ oop memory

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

objects=new Base[1024];

在内存分配方面与

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

还是会有差距?

3 个答案:

答案 0 :(得分:8)

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

请注意,您不能将new[]deletefree混淆,您必须使用delete[] objects释放内存。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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