атомное <UDT>выравнивание по размеру слова - PullRequest
0 голосов
/ 28 июня 2018

У меня есть следующая структура:

#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, он выдает ту же ошибку.

Заранее спасибо!

...