2013-12-09 15 views
0

Я читаю исходный код flex_string и не очень хорошо понимаю, почему выравнивание необходимо, только для удобства производительности?Почему loki :: flex_string's SmallStringOpt требуется aligment

union 
{ 
    mutable value_type buf_[maxSmallString + 1]; 
    Align align_; 
}; 

здесь ссылка конструкторского документа flex_string:

http://www.drdobbs.com/generic-a-policy-based-basicstring-imple/184403784#4

автор сказал: Но что это такое Align бизнес? Ну, имея дело с такими «сидящими выделениями», вы должны быть осторожны с проблемами выравнивания.

+0

ссылка на wikipedia, ** Выравнивание данных означает перенос данных со смещением памяти, равным нескольким кратным размеру слова, что увеличивает производительность системы из-за того, как процессор обрабатывает память. ** Я думаю, что это единственная причина Вот. – stepinto

ответ

0

Цитирование из связанной статьи:

Но что это такой Align бизнес? Ну, имея дело с таким «сидящим» , «вы должны быть осторожны с проблемами выравнивания. Потому что не является переносным способом определения требований к выравниванию. Storage имеет, SmallStringOpt принимает тип, который указывает выравнивание, и хранит его в переменной dummy align_.

Я считаю, что это связано с параметром шаблона хранилища. Чтобы быть как можно более общим, класс пытается работать с любым контейнером, даже если у этого контейнера есть определенные требования к выравниванию для его элементов. Это может быть связано с соображениями производительности или может быть связано с совместимостью с определенной архитектурой. Дело в том, что нет надежного, переносимого способа определить требования к выравниванию независимо от того, что «Хранение» заканчивается.

Следовательно, параметр Align предназначен для определенного типа, размер которого равен выравниванию, требуемому Storage. Это фиктивная переменная в объединении - она ​​никогда не записывается и не читается. используется только его размер.

Из кода видно, что размер маленькой струны является наивысшим из сконфигурированного максимума и выравниванием, что делает выравнивание минимальным настраиваемым размером маленькой строки.

Надеюсь, это поможет!

+0

очень полезно, спасибо! – stepinto

 Смежные вопросы

  • Нет связанных вопросов^_^