C++新的运算符 - 内存布局

C++ new operator - memory layout

本文关键字:内存 布局 运算符 C++      更新时间:2023-10-16

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

objects=new Base[1024];

在内存分配方面与

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

还是会有差距?

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

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

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

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