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