| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Выравнивание |
| Автор: sergioK1 12.4.2014, 08:27 | ||
попался такой код
Что это за макросы и для чего ? где об этом ножно прочитать ? |
| Автор: feodorv 13.4.2014, 23:34 | ||||
Простите ради Бога, но неужели для того, чтобы понять, что это за макросы, нужно обязательно прочитать о них где-нибудь??? Вырабатывайте навыки чтения чужого кода, который зачастую даже не комментирован. То, что делается в приведённом коде, совершенно очевидно. Сначала проверяется, не выровнены ли адреса src и dst по четырёх-байтовой границе (или каков там размер лонга в байтах). Потому что именно в этом случае возможно соптимизировать копирование одной стоки в другую: становится возможным копировать не по одному байту, а сразу по четыре (или каков там размер лонга в байтах). Однако в этом случае нужно элегантно проверить копируемые 4 байта на завершающий строчку src ноль (ибо он и служит терминатором процесса копирования). Проверка на выравненность адреса выполняется путём тестирования последних бит адреса
Проверку на наличие нулевого байта в копируемых четырёх байтах осуществляет второй макрос DETECTNULL. Если не верите, потестируйте следующую программу:
В ходе исследования приведённого кода может возникнуть несколько вопросов, например:
|
| Автор: sergioK1 15.4.2014, 19:22 | ||||||
сам код Я понима, не понимаю откуда взяли математику под ним . Что это за булевые операции? Где про них прочитать ? |
| Автор: feodorv 15.4.2014, 21:30 |
http://graphics.stanford.edu/~seander/bithacks.html или на русском http://mirknig.com/knigi/programming/35-algoritmicheskie_trjuki_dlja_programmistov.html. |