Насколько актуально было ручное смещение битов для умножения и деления в ранних компиляторах C и C ++? - PullRequest
0 голосов
/ 04 октября 2019

Сегодня часто лучше доверять компилятору. Но еще во времена простых процессоров и написания кода на ассемблере программист знал, что сдвиг битов не только быстрее, но и экономит драгоценную память при компиляции в двоичный код.

Когда компиляторы C и C ++ были еще очень молодыПрограммисты на ассемблере следовали традиции, сдвигая биты, как они это делали на ассемблере, или они также могли доверять компилятору оптимизировать это? Была ли предрасположенность продолжать сдвиг в битах из-за используемых компиляторов, которые не оптимизировали?

Похоже, что сегодня существует конфликт с мнением о сдвиге битов. Существует образовательная сторона, которая объясняет, почему это быстрее, чем умножение. Но это не всегда приводит к наиболее оптимальному коду. И все же часто встречаются явные сдвиги в алгоритмах и выражениях как для старого, так и для нового кода.

Для некоторой дополнительной точки зрения я заинтересован в изучении истории. В 70-х и 80-х годах как опытные программисты решали, следует ли сдвигать биты или умножать / делить? Была ли какая-то технология, которая делала эти усилия в значительной степени устаревшими, такие как спекулятивное выполнение или предсказание ветвлений?

Что мне наиболее трудно понять, так это то, что я чаще всего сталкиваюсь с кодом, в котором сдвиг выполняется против очень малогоконстанта, как 1 или 2. Я ожидаю, что такие сдвиги будут самыми простыми для распознавания компилятором. Почему же тогда кто-то решил использовать такие сдвиги?

Возможно, я сделал несколько ложных предположений. Я также приветствую любые комментарии на эту тему.

...