Чтобы использовать OSAtomicDecrement (специфическая для атома атомная операция), мне нужно предоставить 4-байтовый выровненный SInt32.Как обеспечить соответствие элемента 4 байта?
Работает ли этот вид кулинарной работы? Есть ли другой способ справиться с проблемами выравнивания?
struct SomeClass {
SomeClass() {
member_ = &storage_ + ((4 - (&storage_ % 4)) % 4);
*member_ = 0;
}
SInt32 *member_;
struct {
SInt32 a;
SInt32 b;
} storage_;
};
В чем преимущество этого решения, поскольку оно менее портативное (и дополнительное 4 байта используемого пространства нормально)? – gaspard
Я действительно не хочу добавлять другой '#ifdef __gcc__' ... – gaspard
-1: это гарантирует выравнивание хранилища для указателя. Да, так как это выровненное хранилище_ также будет выровнено, но это будет косвенным и запутанным. Если вы хотите порекомендовать задание выравнивания, просто выровняйте переменную (удалите структуру и просто создайте элемент '__attribute __ ((__ aligned (4))) SInt32 a_;' –