Куда угодно
В смысле?
В буквальном
Ну, если уж так интересно - alignof(string) зачастую равно alignof(pointer)
Оно же должно зависеть от sizeof std::string?
оно должно зависеть от alignof
sizeof std::string всегда одинаков на данной платформе
Выравнивание зависит от выравнивания самого выравненного члена, в случае строки - указатель
Вообще-то, оно не обязано зависеть от самого выровненного члена
Потому что внутри стринга указатель(и)
От пожелания компилятора
Это понятно, но там не 1 указатель, а десятки
По стандарту без особых плясок с директивами - всë именно так. Ибо это является оптимальным для большинства платфори
Блин, ну в подавляющем количестве случаев от выравнивания членов
alignof это выравнивание, а не размер
Откуда десятки? Я могу максимум придумать три
Как минмум методы
А причем они вообще?)
Десятки? 😁 А чего не сотни? Во всех известных реализациях из либо 2 либо 1.
Один я ещё могу понять (cow), 3 - тоже, но 2 как?
как-нибудь дофига оптимизированно хранить информацию о SSO?
Выдумать можно и полтора указателя, речь про существующие реализации
Эээ, указатель на начало строки и указатель на ее конец в буфере.
Хотелось бы посмотреть на реализацию, которая плюнула на capacity
Что это плюнула? Будет еще одно поле - capacity. Только оно будет не указатель, а просто size_t. А изначально речь шла именно про указатели и сколько их в классе строки.
Насколько я помню, capacity хранят тоже в виде указателей. Было бы странно хранить size и capacity в разных формах. Перепроверю реализации попозже из любопытства
Символьный список можно в 16 байт уложить(можно в 8). Скорость работы будет феноменальная
при поддержке аллокатора можно доставать капасити оттуда и укладываться в 2 fbvector так умеет но к строке вряд ли применяется этот приём потому что уменьшение её размера это уменьшение процента SSO
Обсуждают сегодня