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
与不完整类型一起使用)。
在用于内存分配的 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
与不完整类型一起使用)。