Это деталь архитектуры платформы, но вы должны иметь в виду, что атомарные операции - это нечто большее, чем выравнивание.ABI платформы обычно по умолчанию обеспечивают выравнивание примитивного типа данных, чтобы любая операция (включая атомарные) работала.Функция malloc () никогда не должна возвращать вам неверно выровненный указатель, даже если вы запрашиваете один байт.
Хотя, в дополнение к этому, особенно следите за http://en.wikipedia.org/wiki/False_sharing - что означает необходимостьиметь выравнивание (обычно sizeof(long)
), вы также должны убедиться, что размещаете только одну переменную с атомарным доступом в одной и той же кэшированной строке.
Это особенно важно, если вы планируете использовать / разрешать массивы этих счетчиков.
Компиляторы Microsoft используют __declspec(align(value))
для указания компилятору гарантировать выравнивание определенной структуры.Как уже упоминалось, похоже, что такая структура / класс данных не нуждается в распределении кучи, но я не знаю, нужен ли вам pimpl для чего-то другого.