Ответ на этот вопрос сильно зависит от реализации.
Однако в x86 и x86_64 GCC реализует __builtin_prefetch
как отдельную PREFETCH
инструкцию по сборке.
Согласно документации Intel (поиск "PREFETCH"):
Извлекает строку данных из памяти, которая содержит байт, указанный с источником
операнд для местоположения в иерархии кэша, заданного подсказкой локальности:
Я на 99% уверен, что версия AMD ведет себя так же, но я слишком занят, чтобы проверить ...
Таким образом, если операнд памяти не выровнен, он будет эффективно округлен до кратного 64 байт и эта строка кэша будет предварительно выбрана. (Что ж, 64 байта на всех текущих процессорах, о которых я знаю. Ссылка на набор инструкций гарантированно будет «минимум 32 байта». Не уверен, почему они удосужились сказать это; в любой ситуации, где имеет смысл использовать этот гаджет, Вы должны уже много думать о конкретном процессоре.)