为什么Java不需要sizeof()(和C/C++的比较)

C程序员在写Java程序时可能会问个问题,为什么Java不需要sizeof()功能?

总结下自己的理解。

1. 首先介绍C语言中的sizeof()

   sizeof()在C语言中是个宏定义,类似如下:

#define sizeof_v(var)   ((size_t) ((char *)(&(var) + 1) - (char *)&(var)))
#define sizeof_t(type)  ((size_t) ((type *)0 + 1)
   所以sizeof()是以字节为单位给出一个变量或类型的占用内存空间大小。这就造成如下几个小陷阱:

   a.  指针变量的sizeof, 在32bit计算机中总是返回4

   b. 数组的sizeof值是数组所占用的内存字节数

   c.  结构体的sizeof()值依旧返回字节数,但是要注意字节对齐

   d. 对于 sizeof('a') , C语言返回值为4, C++返回值为1(?)

2. 为什么C语言需要sizeof()

    这是因为C程序员需要操作内存,例如malloc();这就要求C程序员有必要知道类型或者变量所占用的内存大小;

3. 为什么C++也需要sizeof()

     主要原因应该是为了和C语言兼容,因为C++已经有new关键字来创建对象,所以对sizeof()的需求并不迫切;

4. 为什么Java没有sizeof()

     Java纯面向对象,把内存管理的细节完全交给JVM去做。并且为了跨平台需要,对各平台上的类型大小进行了统一,如将int类型全部看成4字节(32位机)。

     所以Java语言没有保留sizeof()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值