В документации для функции InterlockedExchangePointer указано:
В 64-битной системе параметры являются 64-битными, а целевой параметр должен быть выровнен по 64-битным границам; в противном случае функция будет вести себя непредсказуемо. В 32-разрядной системе параметры являются 32-разрядными, а целевой параметр должен быть выровнен по 32-разрядным границам.
Я компилирую для 32-битной, и программа работает на 32-битной и 64-битной архитектурах; Предоставляет ли следующая структура указатели, которые может использовать InterlockedExchangePointer в любой (32- или 64-битной) работающей архитектуре без адаптации кода?
template <class T>
struct Foo {
enum { count = 3 };
__declspec(align(64)) T objects[count];
};
(Я предполагаю, что если один указатель выровнен по 64 битам, он также выровнен по 32 битам, даже если есть заполнение при работе на 32 битах)
Спасибо.