Подсказки компилятору
От: maks1180  
Дата: 13.11.22 22:29
Оценка:
Посмотрел я как gcc v10.2 компилирует в ассемблер функцию memcpy на x64 платформе, видел 2 реализации:
1) простая через rep movsb — отличная вещь для копирования небольшого размера
2) сложная, сравнивает размер если size>=8 то копирует 8 байт, потом выравнивается и по 8 байт в цикле копирует, если >=4 то другая ветка срабатывает, если >=2 то третья ветка, если <2 то четвёртая. Код получается большой, но оправдан если нужно скорость и данных много

По какому принципу gcc выбирает если размер не известен на этапе компиляции — мне не понятно. Но очевидно что разработчик может знать в каком месте ожидается много байт, а каком 0-3 байта будет. И если разработчик сможет как-то подсказать компилятору, то код будет меньше и быстрее работать.

Может я что-то не знаю и есть способ как подсказать компилятору ?


По мне так, это должен процессор делать по команде rep movsb если видит скажем что мы просим 17 байт скопировать, он сам должен решить что быстрее будет копировать 8+8+1, чем 17*1. И сам должен решить когда выровняться скажем 1+8+8 или 8+8+1 или 3+8+6.
Неужели современные процессоры этого не делают и компилятору приходится такой код ужастный компилировать, который будет увеличивать размер exe и тормозить при малых размерах копирования ( я про вариант 2)
===============================================
(реклама, удалена модератором)
Отредактировано 13.11.2022 22:46 maks1180 . Предыдущая версия . Еще …
Отредактировано 13.11.2022 22:45 maks1180 . Предыдущая версия .
Отредактировано 13.11.2022 22:36 maks1180 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.