Добрый вечер.
Насколько я помню, стандарт C++ довольно ревниво относился к неаккуратной работой с памятью. А именно, меня интересует следующий вопрос: имеется код (одна старая игра), который работает с сетью - получает и отправляет сообщения. Все сообщения сваливаются в один буфер, одно за другим. То есть, сперва может хранится int16, потом, прямо за ним без всякого padding'a структура, итд. Следовательно, некоторые типы хранятся невыровненными в естественных для них границах. После чего может спокойно делаться:
Type * ptr = (Type *)&buffer[offset];
ptr->field = ...
Я знаю, что согласно стандарту это плохо, но вопрос в следующем - могут ли возникнуть реальные проблемы с этим кодом на хоть сколько нибудь распространённых архитектурах ?
И ещё один вопрос, как относится стандарт к прямому доступу к элементам std::vector, например:
vector<byte> data;
data.resize(64);
memcpy(&data[10], src, count);
// итп.
Насколько я знаю, покуда не использовать vector<bool> реальных проблем быть не должно, но что говорит стандарт ? Если что, я в курсе про std::copy. Просто в коде с которым приходится работать имеется множество велосипедов в виде полунедоделанных структур данных. Хотелось бы заменить лишние сущности на vector. Проблема в том, что эти велосипеды раздавали свои 'char * data_ptr' налево и направо, и огромное количество кода работает с их памятью напрямую.