c ++ InterlockedExchangePointer и выравнивание указателя - PullRequest
1 голос
/ 23 февраля 2010

Документация для функции InterlockedExchangePointer гласит:

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

I'm компиляция для 32-битных , и программа будет работать на 32-битных и 64-битных архитектурах ;обеспечивает ли следующая структура указатели, которые могут использоваться InterlockedExchangePointer в любой (32 или 64-битной) работающей архитектуре без адаптации кода ?

template <class T>
struct Foo {
    enum { count = 3 };
    __declspec(align(64)) T objects[count];
};

(я предполагаю, что если один указатель выровнен64 бита, он также выровнен на 32 бита - даже если есть заполнение, если работает на 32 бита)

Спасибо.

1 Ответ

2 голосов
/ 23 февраля 2010

В 64-битной системной программе, написанной для 32-битной платформы, будет работать через уровень совместимости (WoW, Windows в Windows), а ваши указатели должны быть выровнены по 32 битам.

Но если вы скомпилируете свою программу в 64-битном режиме - ваши указатели будут автоматически выровнены по 64-битным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...