Рассматривая реализацию stc :: basic_string в libc ++, я натолкнулся на это в строке 1374 (на момент написания):
enum {__alignment = 16};
Это значение используется впоследующие вычисления выравнивания, запросы на размер строки округляются до кратных этому числу.
Я могу согласиться с тем, что некоторое округление происходит во избежание фрагментации памяти или чего-то еще, но ...
Интересно, есть ли какое-либо конкретное обоснование для использования в качестве числа здесь жестко закодированного 16 , или оно просто используется как «хорошее» круглое «число».
Для 64-битной машины 16
равняется alignof( std::max_align_t )
, и это имеет некоторый смысл.Но точно такое же значение для __alignment
используется и для 32-битных архитектур, так что ...?