Win32 - должна ли структура CRITICAL_SECTION иметь определенное (4/8 байт) выравнивание?

Я работаю над проектом, в котором по умолчанию используется 1-байтовое выравнивание, в том числе в местах, где используется структура CRITICAL_SECTION. Я исследую определенный тупик и вижу, что данные в структуре CRITICAL_SECTION, которая вызывает проблему, недействительны ... может ли выравнивание быть проблемой? (Я также вижу, что для этого конкретного CRITICAL_SECTION действительно выравнивание равно 1 (нечетный адрес) ..)

Спасибо, Амит


person Amit    schedule 18.11.2012    source источник
comment
Нет, заголовки Windows указывают выравнивание.   -  person Hans Passant    schedule 18.11.2012
comment
Вы говорите о выравнивании внутри структуры или выравнивании самой структуры.   -  person David Heffernan    schedule 18.11.2012


Ответы (1)


Заголовочные файлы Windows требуют /Zp8 упаковки. Вы должны соблюдать упаковку, указанную в файле заголовка.

person Raymond Chen    schedule 18.11.2012
comment
Дэвид - оба. В случае, который я описал, например, я вижу, что и сама структура, и ее член LockCount имеют выравнивание 1 - person Amit; 18.11.2012
comment
Спасибо, Рэймонд, все же я был бы рад узнать, возникла ли у кого-нибудь проблема из-за неподдерживаемого выравнивания структуры CRITICAL_SECTION в частности, чтобы быть более уверенным, что это также моя проблема ... - person Amit; 18.11.2012
comment
@Amit Является ли это вероятной причиной, будет зависеть от того, какую версию Windows и какую архитектуру процессора вы используете. - person Raymond Chen; 18.11.2012
comment
Что касается архитектуры, это в основном процессор x64, но приложение 32-разрядное. - person Amit; 18.11.2012
comment
Я не знал ответа, но решил поискать на SO. (Вы тоже могли бы это сделать.) В этом ответе говорится, что невыровненный доступ, пересекающий границу строки кеша, не является атомарным для определенные семейства процессоров. - person Raymond Chen; 18.11.2012
comment
Спасибо, Рэймонд ... это не касается конкретно критических секций ... но я предполагаю, что необходимо, чтобы где-то в глубине души такие функции, как EnterCriticalSection и т. Д., Использовали некую атомарную инструкцию вроде этой ... - person Amit; 18.11.2012