牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2015-01-31 投稿人: 浏览次数:1102

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()。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。