开发者社区> 问答> 正文

网络编程和字节对齐的问题?

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)。这样的话,通过网络发送这个缓冲区里的数据的话就不包含字节对齐的值了吧,这就是序列化的意义吗?

求大神告诉我理解的对不对?不对的话我的哪些地方没有理解对呢?

展开
收起
a123456678 2016-03-09 15:50:38 2102 0
1 条回答
写回答
取消 提交回答
  • 1.write(sockfd, &demo, sizeof(demo));
    这样发出去确实是16字节。
    但是你要明白write函数本身是跟字节对齐没关的。write函数本身只知道从哪个地址开始,发送多少字节的内容,write函数本身可不知道你的demo是什么结构。之所以会发送16个字节,是因为sizeof(demo)算出来是16字节。

    2.序列化是一些编程语言的库提供的,可以将数据映射为bytes用来存储或传输。反序列化就是从bytes重新进行加载还原。这两个过程是库本身提供的,库的开发者会确保这个过程在所有平台上都是可移植的。

    2019-07-17 18:56:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载