Sanyok писал(а):
:) Хотя я слышал, что иногда лучше все-таки оперировать словами (а не байтами). Вроде как скорострельность будет больше, если данные в памяти выровнены по границам слов, и грузятся соответственно тоже словами.
Это очень тонкий вопрос. И самое главное - а хотите ли Вы оптимизировать программу на таком уровне. Главная проблема - это слишком многое зависит от конкретного процессора и конкретного железа (контроллера памяти и самой памяти). Точное априорное предсказание поведения возможно, но требует просто колосальных трудозатрат. Motorola, например, публикует схемы выполнения команды в процессоре с правилами их наложения, et cetera. И, несмотря на их подробность, я не уверен, что они достаточно полны и точны.
Можно пойти по пути эксперимента. Но тогда Вы оптимизируете программу под свое железо, и, в общем-то, вслепую. Факторы же влияющие на быстродействие могут быть зело неочевидны. Я однажды провел вечер гоняя тесты (лучше бы голубей гонял!), чтобы убедиться, что результат
существенно зависит от выравнивания самой программы (а не данных, в моем случае). Мне повезло, ибо железо, под которое я гнал было строго однородно - это далеко не всегда так.
Мой вывод такой - оптимизация всей программы того не стоит. Надо писать аккуратно и грамотно. Если этого мало - найти 10% кода, тратящих 90% времени, и оптимизировать их. В остальном довериться авторам компилятора и библиотеки. (Я видел как-то серьезный memcpy() для Intel'а - с опережающей закачкой в кэш процессора, оптимизацией размера обращения к памяти, и прочее. Ну их на фиг. Я лучше буду благодарным пользователем такой библиотеки - до тех пор, пока сам не сяду писать библиотеку. Или не прижмет крепенько.)
Помимо всего прочего, оптимизированный код хуже читается, и дороже в сопровождении, что немаловажно.