新操作员如何知道需要为特定类分配多少尺寸

How does new operator knows how much size needs to be allocated for specific class

本文关键字:分配 多少 操作员 何知道      更新时间:2023-10-16

如果用于内存分配的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)。