Прежде всего, std::string
, вероятно, не лучший контейнер для использования, если вы хотите сохранить произвольные данные. Вместо этого я предлагаю использовать std::vector
.
Во-вторых, выравнивание всех распределений, выполняемых контейнером, контролируется его распределителем (вторым параметром шаблона, который по умолчанию равен std::allocator<T>
). Распределитель по умолчанию будет выровнять распределения по размеру самого большого стандартного типа, который часто равен long long
или long double
, соответственно 8 и 16 байтов на моей машине, но размер этих типов не соответствует стандарту.
Если вам требуется конкретное выравнивание, вы должны либо проверить соответствие вашего компилятора, либо запросить выравнивание явно, предоставив свой собственный распределитель или используя std::aligned_storage
.
Почему 'std :: string' вместо' std :: vector'? –
Я не забочусь о контейнере, пока буфер памяти выровнен, является ли буфер std :: vector гарантированным выравниванием? – user416983
BTW, данные, упакованные в контейнер, имеют разный размер, мне нужно самому интерпретировать буфер. – user416983