gpt4 book ai didi

c++ - 网络数据包有效载荷数据是否应该在适当的边界上对齐?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:29 30 4
gpt4 key购买 nike

如果您将以下类作为网络数据包负载:

类负载{ 字符字段 0; int 字段 1; 字符字段 2; 整数字段 3;};

当通过套接字接收数据时,使用像 Payload 这样的类是否会使数据的接收者容易受到对齐问题的影响?我认为该类需要重新排序或添加填充以确保对齐。

重新排序:

class Payload
{
int field1;
int field3;
char field0;
char field2;
};

或添加填充:

class Payload
{
char field0;
char pad[3];
int field1;
char field2;
char pad[3];
int field3;
};

如果由于某种原因重新排序没有意义,我认为添加填充将是首选,因为它可以避免对齐问题,即使它会增加类的大小。

您对网络数据中的此类对齐问题有何经验?

最佳答案

正确的,盲目忽略对齐会导致问题。即使在同一个操作系统上,如果 2 个组件是用不同的编译器或不同的编译器版本编译的。

最好...
1) 通过某种序列化过程传递您的数据。
2)或者单独传递每个原语,同时仍然注意字节顺序== Endianness

开始的好地方是 Boost Serialization .

关于c++ - 网络数据包有效载荷数据是否应该在适当的边界上对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/753440/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com