新操作员如何知道需要为特定类分配多少尺寸
How does new operator knows how much size needs to be allocated for specific class
如果用于内存分配的malloc函数,我们指定了要分配的大小,例如
void *malloc(8);
,但如果新的情况,我们没有指定如下
的大小Foo *fo = new Foo();
因此,我的问题是新操作员函数如何知道分配给对象所需的大小。请解释一下,现场会发生什么?
编译器已经看到了Foo
的定义,因此它知道需要多少内存。new Foo
从本质上转变为两个操作:operator new(sizeof Foo)
分配内存,然后在新分配的空间中构建Foo
对象。
与malloc
完全相同。operator new
采用一个指定分配字节数的参数。
http://en.cppreference.com/w/cpp/memory/new/operator_new
您不需要手动指定大小,因为使用new
时,编译器将自动通过类型的大小传递。为此,类型必须是完整的类型(您不能使用不完整类型的new
)。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 在程序变得低效之前,允许多少新的[]和删除[]分配是否有限制?
- 在 Windows 中使用 C++ 可以分配的动态内存的最大大小是多少?
- 每个对象内存分配有多少开销
- 指针数组中将有多少内存分配
- 我可以在 MacBook Pro 上分配的最大内存量是多少?
- 新操作员如何知道需要为特定类分配多少尺寸
- 如果我使用共享内存,可以分配多少个块
- 在类方法中使用新运算符动态分配内存的寿命和范围是多少
- new分配了多少字节
- 一个程序将分配多少堆栈内存
- std::vector-他将分配多少内存(在重新分配期间)
- 为argv[]分配了多少内存
- 应该为使用GetDIBits函数从HBITMAP接收的DIB数据分配多少内存
- Visual c++的最大内存分配大小是多少?
- malloc是如何分配内存的,堆的大小是多少