почему loki :: flex_string’s SmallStringOpt нуждается в aligment

Я читаю исходный код flex_string и не очень хорошо понимаю, почему выравнивание необходимо, просто из соображений производительности?

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

Решение

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

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

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]