требования выравнивания для атомарных команд x86

Microsoft предлагаетInterlockedCompareExchange функция для выполнения атомарных операций сравнения и замены. Также есть_InterlockedCompareExchange свойственный.

На x86 они реализованы с использованиемcmpxchg инструкция.

Однако, читая документацию по этим трем подходам, они, похоже, не согласны с требованиями выравнивания.

Intel,справочное руководство ничего не говорит о выравнивании (кроме этогоесли проверка выравнивания включена и сделана ссылка на невыровненную память, сгенерировано исключение)

Я также посмотрел вверхlock префикс, в котором конкретно указано, что

Целостность префикса LOCKне влияет на выравнивание поля памяти.

(акцент мой)

Таким образом, Intel, кажется, говорит, что выравнивание не имеет значения. Операция будет атомной, несмотря ни на что.

_InterlockedCompareExchange Внутренняя документация также ничего не говорит о выравнивании, однакоInterlockedCompareExchange функция говорится, что

Параметры для этой функции должны быть выровнены по 32-битной границе; в противном случае функция будет работать непредсказуемо в многопроцессорных системах x86 и любых системах, отличных от x86.

Так что же дает? Требования к выравниванию дляInterlockedCompareExchange просто чтобы убедиться, что функция будет работать даже на CPU до 486, гдеcmpxchg Инструкция не доступна? Вероятно, это основано на приведенной выше информации, но я хотел бы убедиться, прежде чем положиться на нее. :)

Или ISA требует выравнивания, чтобы гарантировать атомарность, а я просто ищу неправильные места в справочных руководствах Intel?

Ответы на вопрос(4)

Ваш ответ на вопрос