Получается хороший такой нюанс при пересылке данных. Записываем какие-то POD структуры в некий буффер, отсылаем в сеть, принимаем его с другой стороны в какой-нибудь буффер. Значит мы не имеем права напрямую получать указатель на эту структуру в буффере для работы с ней, и обязаны предварительно положить её через memcpy в более ровное место?
frost
> и обязаны предварительно положить её через memcpy в более ровное место?
Не обязательно, если место в буфере изначально было выбрано аккуратно.
Увы не получается, в данном случае место выбирает не аллокатор а сетевой протокол, которого абсолютно не должно волновать выравнивание на каждой из машин в сети. Допустим идут данные потоком (TCP) |header|data1|header|data2|, заголовки одинаковые, а вот в данных что угодно, может быть один байт, а может быть и структура, это уже после чтения заголовка ясно будет. Похоже придётся отказаться от идеи с минимумом копирований и аллокаций, и всё-таки добавить честную сериализацию. Хаодно избавлюсь от любых проблем с endianess.
> Допустим идут данные потоком (TCP) |header|data1|header|data2|, заголовки одинаковые, а вот в данных что угодно, может быть один байт, а может быть и структура,
Данные от tcp в любом случае идут кусками, и требуют манипуляций с реконструкцией полного пакета из доставленных кусков.
Опять же, структурки по сети могут лететь зипованными, что уже не позволяет тыкать указателем на структуру во временный буфер.
Тема в архиве.