struct TestClass
{
int a;
double b;
};
这个结构体占用的内存的大小是16字节(windows下),它在内存里面按照double的字节大小对齐。
TestClass demo = {1, 1.1};
定义一个对象后,通过网络把这个demo对象发出去。
write(sockfd, &demo, sizeof(demo));
这样是发出去16个字节对吧?这样发出去的数据就包含了编译器字节对齐插进去的4个字节了吧?我的理解对吗?
如果把这个demo对象序列化为二进制的话是不是就是把demo里的int和double的值复制到一个缓冲区里,这样这个缓冲区的里面的值的长度就是12字节了(int + double)。这样的话,通过网络发送这个缓冲区里的数据的话就不包含字节对齐的值了吧,这就是序列化的意义吗?
求大神告诉我理解的对不对?不对的话我的哪些地方没有理解对呢?
内存布局不可移植. 而且还有空隙.
序列化就是为了移植. 各种语言遵守序列化的方式, 就可以反序列化出来对象, 可以把一个对象序列化. 这样就可以跨语言交互.