Java“ Foo f = new Foo()”中的对象初始化与使用malloc作为C语言中的指针基本相同吗?

问题描述 投票:0回答:1

我正在尝试了解Java中对象创建背后的实际过程-并且我想使用其他编程语言。

假设Java中的对象初始化与对C中的结构使用malloc时是错误的吗?

示例:

Foo f = new Foo(10);
typedef struct foo Foo;
Foo *f = malloc(sizeof(Foo));

这就是为什么说对象位于堆而不是堆栈上的原因?因为它们本质上只是数据指针?

java c object memory memory-management
1个回答
0
投票

在C中,malloc()在堆中分配一个内存区域,并返回一个指向该区域的指针。那就是你所得到的。内存尚未初始化,您无法保证它全为零或其他任何值。

[在Java中,调用new会像malloc()一样执行基于堆的分配,但是您有很多额外的便利性(或者,如果愿意,也可以增加开销)。例如,您不必显式指定要分配的字节数。编译器会为您解决。此外,还调用了对象构造函数(如果您想控制初始化的发生方式,可以将其传递参数)。当new返回时,可以确保您有一个初始化的对象。

但是,是的,在调用结束时,malloc()new的结果都只是指向某些基于堆的数据块的指针。

© www.soinside.com 2019 - 2024. All rights reserved.