Oth*_*oun 8 c++ java class alignment padding
我知道这个C++类的一个实例:
class A {
char c;
int iiii;
short ss;
};
Run Code Online (Sandbox Code Playgroud)
在内存中看起来有点像这样: c| | | |i|i|i|i|s|s| | |
这个4/2字母注释没有任何意义(但我认为我的观点很明确)
1 byte for char,3 bytes of padding,4 bytes of int,2 bytes for the short,和2 bytes of tail padding (依赖于平台的,但它不会改变逻辑)
从C++标准(编译器不会改变我的例子中的字段的顺序):
分配具有相同访问控制(第11条)的(非联合)类的非静态数据成员,以便后面的成员在类对象中具有更高的地址.具有不同访问控制的非静态数据成员的分配顺序未指定(第11条).实施对齐要求可能导致两个相邻成员不能立即分配; 因此,可能需要空间来管理虚拟功能(10.3)和虚拟基类(10.1).
所以,我想知道Java类是否相同,编译器是否可以更改顺序以减少填充?
首先看看Java对象在运行时在内存中是什么样子的?并了解您的 Java 对象内存布局。
但我想Java 对象内存结构回答了你的问题。
为了节省一些内存,Sun VM 并不按照对象属性声明的顺序来排列它们。相反,属性在内存中按以下顺序组织:
Run Code Online (Sandbox Code Playgroud)doubles and longs ints and floats shorts and chars booleans and bytes references