IZ
Size: a a a
IZ
IZ
AP
D
operator<<
. Поэтому получается такая избыточная каша: делается выделение на стеке, чтобы поместить char
, и call вместо jmp, чтобы потом освободить. Вопрос почему не используют std::ostream::put
, кладя char
в регистр.AP
operator<<
. Поэтому получается такая избыточная каша: делается выделение на стеке, чтобы поместить char
, и call вместо jmp, чтобы потом освободить. Вопрос почему не используют std::ostream::put
, кладя char
в регистр.AP
D
EP
auto print = [w](auto && ... e) {хочется:
(std::cout << ... << e) << "\n";
};
auto print = [w](auto && ... e) {
(std::cout ???<<std::setw(w[field_index])<<??? << ... << e) << "\n";
};
SS
AP
operator<<(char)
а не запись массива символовD
operator<<(char)
а не запись массива символовstd::cout << " ";
выгоднее (по крайней мере по инструкциям) чем std::cout << ' ';
AP
D
operator<<(char)
а не запись массива символовstd::cout << " "
используется подмножество действий, осуществляемых при использовании std::cout << ' '
. Получается единственный проигрыш строковой версии, по сравнению с символьной, только в случае, если секция с выводимой строкой даст cache-miss. В противном случае, по инструкциям тяжелее выводить символ. На нижнем уровне как устроено я не знаю, но только если в итоге нужно будет использовать напрямую системный вызов, например, write, которому понадобится адрес на выводимые данные, то тогда регистрами не обойдемся. Но если вывод буфферизированный, то с регистром вполне можно работать по-моему. И странно, что char-specific функция не используется при выводе символов.D
class Inner : ::Base<float>
D
class Inner : ::Base<float>
SS
SS
D
SS
В