У меня есть следующая структура:
#define _ENABLE_ATOMIC_ALIGNMENT_FIX
#ifdef _WIN32
struct alignas(4) s {
uint16_t a;
uint16_t b;
uint16_t c;
uint8_t d;
uint8_t e;
};
#else
struct alignas(8) s {
uint16_t a;
uint16_t b;
uint16_t c;
uint8_t d;
uint8_t e;
};
#endif // _WIN32
Предполагается, что он будет работать на 64-битной машине linux, поэтому я пытаюсь создать структуру из 64 битов, которая может быть атомарной, и поскольку она имеет размер слова, она будет свободна от блокировки. Тем не менее, я кодирую и тестирую это на 32-битном компьютере с Windows. Visual Studio 2015 (обновление 3) всегда выдает следующую ошибку:
2>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\atomic(519): error C2719: '_Right': formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(525) : error C2719 : '_Right' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(542) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(548) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(580) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(587) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(594) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(602) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(610) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(617) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(624) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(632) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(640) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(647) : error C2719 : '_Value' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(680) : error C2719 : '_Val' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(686) : error C2719 : '_Right' : formal parameter with requested alignment of 8 won't be aligned
2>C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\include\atomic(691) : error C2719 : '_Right' : formal parameter with requested alignment of 8 won't be aligned
Я попытался использовать alignas (8) в Windows, и он все еще не компилируется. Я не понимаю, почему компилятор не может выровнять с обязательными полями. Если я удаляю тег alignas, он выдает ту же ошибку.
Заранее спасибо!