C++新的运算符 - 内存布局
C++ new operator - memory layout
新运算符是否保证分配连续的堆内存块? 即
objects=new Base[1024];
在内存分配方面与
objects=(Base*)malloc(1024*sizeof(base));
还是会有差距?
是的,内存将是连续的。在分配方面,它与malloc
版本相同,但有几个区别(调用构造函数,new
不返回NULL
,malloc
不抛出异常等)。
请注意,您不能将new[]
与delete
或free
混淆,您必须使用delete[] objects
来释放内存。
也许吧。 new
运算符做两件事:它调用 operator new
函数,它将返回一个连续的内存块,该块对所有可能的类型都充分对齐(除非它没有;例如,误用的放置 new);然后,它调用对象的构造函数,该构造函数几乎可以执行任何操作。 包括分配额外的块,这些块不会与第一个块相邻。
如果 new
运算符未重载,则分配的内存块是连续的。但是如果它超载了,我们就无法知道(一些邪恶的程序员可能已经超载了它?:D)
相关文章:
- C++继承的虚拟类的内存布局
- 检查nullptr是否100%保护内存布局不受segfault影响
- C++ Python 的扩展 - 安全内存访问和内存布局
- 类似元组的类模板的反向内存布局
- 在C++标准中记录对象的内存布局的哪个位置?
- C++ Lambda 的内存布局
- 打包类的内存布局 + 继承
- 假设传递给 OpenGL 的结构数组的内存布局存在潜在错误
- COM 互操作结构定义与内存布局不匹配
- C++非虚拟类成员变量内存布局?
- 结构中的内存布局差异
- 2D 区域的内存布局
- 如果"原子"<T>是无锁的并且与"T"的大小相同,内存布局是否相同?
- 是C 单继承的内存布局与此C代码相同
- 直观的内存布局,可实现快速SIMD/面向数据的设计
- 使用GDB并检查Data的内存布局
- 对齐方式究竟如何影响内存布局和新放置的巴哈维?
- 数组向量的内存布局是什么
- 为什么C 标准专门为具有不同访问说明符的类数据成员的内存布局提供了余地
- C++对象内存布局