我正在尝试了解Java中对象创建背后的实际过程-并且我想使用其他编程语言。
假设Java中的对象初始化与对C中的结构使用malloc时是错误的吗?
示例:
Foo f = new Foo(10);
typedef struct foo Foo;
Foo *f = malloc(sizeof(Foo));
这就是为什么说对象位于堆而不是堆栈上的原因?因为它们本质上只是数据指针?
在C中,malloc()
在堆中分配一个内存区域,并返回一个指向该区域的指针。那就是你所得到的。内存尚未初始化,您无法保证它全为零或其他任何值。
[在Java中,调用new
会像malloc()
一样执行基于堆的分配,但是您有很多额外的便利性(或者,如果愿意,也可以增加开销)。例如,您不必显式指定要分配的字节数。编译器会为您解决。此外,还调用了对象构造函数(如果您想控制初始化的发生方式,可以将其传递参数)。当new
返回时,可以确保您有一个初始化的对象。
但是,是的,在调用结束时,malloc()
和new
的结果都只是指向某些基于堆的数据块的指针。