Стандарт C ++ ничего не говорит об этом: экстернализация объектов, даже встроенных типов, и их обратное чтение могут работать или не работать.На практике это имеет тенденцию работать с этим, как правило, с плохой идеей: то, что начинается с быстрого способа делать вещи, часто быстро используется во многих местах (в конце концов, это «работает») и эффективно ограничивает использование подхода одной платформой.Я работал не только над проектом, где существует сильная зависимость от 32-битных слов с определенным порядком байтов.Тот факт, что современная система имеет тенденцию к 64-битным словам и популярным (и, следовательно, дешевым и мощным) процессорам, отличным от Endianess, фактически означает, что эти проекты ограничены относительно дорогими машинами, которые в дополнение к этому используются для работы в режиме 32-битной совместимости.
Тем не менее, это работает на практике, несмотря на то, что стандартная записка действительно дает какие-либо гарантии.Тем не менее, выбранный вами подход ограничен , а не , чтобы работать слишком хорошо: фактически нет ограничений на выравнивание на char
, т. Е. std::vector<char>
может выделить память и удачно поставить, например, 32-битное слово передоб этом, если не что иное для собственного развлечения.Это будет означать, что слова, которые вы хотите загрузить, не выровнены должным образом и либо не будут загружены вообще, либо будут загружены в замедленном режиме.То есть вы хотите, чтобы ваши std::vector<T>
содержали объекты с максимальным требованием выравнивания (например, какое-нибудь 16-байтовое слово, чтобы справиться со 128-битными словами) и приводили адрес к этому типу в char
.Это, конечно, все еще означает, что данные должны быть выгружены в том же формате, который используется на компьютере.Если возможно, я бы постарался избежать такого подхода.