今天在做jna实验的时候,发现一个问题:
jna中struct有:int,byte,char三种类型的字段,本来我通过struct.getPoint之后,再通过pointer.getChar(5)应该会取得结构体中的char值,可是我发现无论如何都不正确,我将pointer所指的每个byte内存拿出来看,发现pointer.getChar(6)才正确,并且不管原来的char值是英文还是中文都是getChar(6)才正确。这使我想到一个问题,如果我将来要通过jna给C/C++传结构体,在C中如何处理各个字段值呢??
C结构体与JavaBean转化
java中字节对齐,有一个github项目 javastruct
字节对齐不是语言强制要求,是硬件上对memory存储信息时做的一些约束。所以C/C++有字节对齐,java语言也有。
C/C++字节对齐是由编译器完成的,java的内存管理师交由JVM管理,所以java的字节对齐也是有JVM控制的,可以参考一下: java jvm字节占用空间分析
C/C++字节对齐是由编译器完成的,java的内存管理师交由JVM管理,所以java的字节对齐也是有JVM控制的,可以参考一下: java jvm字节占用空间分析
还有一些帖子:
JNA的四种内存对齐方式
来源:oschina
链接:https://my.oschina.net/u/2963604/blog/3167025