new 运算符如何知道需要为特定 class 分配多少大小

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) 分配内存,然后在新分配的 space.

中构造一个 Foo 对象

malloc完全相同。 operator new 采用指定要分配的字节数的参数。

http://en.cppreference.com/w/cpp/memory/new/operator_new

不需要手动指定大小,编译器会在使用new时自动传入类型的大小。为此,类型必须是完整类型(您不能将 new 与不完整类型一起使用)。