Я буду использовать этот код в качестве примера:
typedef struct __attribute__((aligned(XXX),packed))
{
uint16_t type;
uint32_t id_index;
} a_msg;
void write_func(){
a_mesg mymsg
mymsg.type = htons(1);
mymsg.id_index = htonl(5);
write(sock_fd, &mymsg, sizeof(a_mesg));
}
void read_func(){
a_mesg mymsg
read(sock_fd, &mymsg, sizeof(a_mesg));
mymsg.type = ntohs(mymsg.type);
mymsg.id_index = ntohl(mymsg.id_index);
}
Примечание: sock_fd
- это сокет TCP.Это немного сжатый пример, и он, возможно, не сработает, но я думаю, вы видите, что я пытаюсь привести в качестве примера (программа, которая взаимодействует по двоичному протоколу).
Если приложение будет работать только на двух 32-битных компьютерах, которые связываются друг с другом через приложение, выравнивание (выровненное (XXX)), естественно, будет установлено равным 4. Если мы установим связь между 32-битной и 64-битной машинами, каким будет выравнивание?
- Должно ли XXX быть 4 на 32- и 64-разрядных компьютерах?
- Должно ли XXX быть 8 на 32- и 64-разрядных компьютерах?
- Должно ли ХХХ быть 8 на 64-х машинах и 4 на 32-битных машинах?
- ХХХ имеет другое значение.
Моя ставка на альтернативу 2.