[kernel] выравнивание всех полей

 
0
 
C++
ava
null56 | 20.02.2013, 15:53
Добрый день

На одном процессоре возникла ситуация, когда требуется, чтобы все поля структуры были выровнены по 4 байтам.
Одно решение мы нашли через приписку к каждому полю структур атрибутов
Цитата


__attribute__((aligned(sizeof(long))))




struct A
{
int16_t __attribute__((aligned(sizeof(long)))) a;
char __attribute__((aligned(sizeof(long)))) b;
int32_t __attribute__((aligned(sizeof(long)))) c;
};


Вопрос:
А нет ли в gcc инструкции, которая бы одним объявлением выравнивала все поля по заданному значению, аналог (push4 pop4 в msvc)? я не нашел в манах, может проглядел

Пример ниже, выравнивает лишь саму структуру

struct A
{
int16_t a;
char b;
int32_t c;
} __attribute__((aligned(sizeof(long))));


Заранее благодарен всем откликнувшимся
Ответы (5)
ava
gormih | 28.03.2013, 16:54 #
Ключ  именно для struct такой вряд ли есть.
Никто не мешает расковырять исходники компилятора в части размерности данных, и заставить их всегда быть кратными 4 байтам. smile
Правда будет не весело, когда int8_t будет занимать 32 бита...
ava
borisbn | 28.03.2013, 22:41 #
 > аналог (push4 pop4 в msvc)?
А что, pragma pack 4 не работает?
ava
volatile | 28.03.2013, 23:24 #
Цитата (gormih @  28.3.2013,  16:54 findReferencedText)
Никто не мешает расковырять исходники компилятора в части размерности данных, и заставить их всегда быть кратными 4 байтам

это чтоб просто выровнять данные чтоле?
 smile 
ava
borisbn | 28.03.2013, 23:34 #
volatile, чоткие посоны простых путей не ищут.
а ещё стоит отметить, что ТС спрашивал не про размерность данных
ava
null56 | 29.03.2013, 15:52 #
borisbn, на самом деле железячники мне неверно объяснили...
Упаковщик работает верно, как ты и сказал, падение может происходит не из - за упаковки.
Если я правильно понял, то упасть blackfin может в следующем случае

char * mem =  malloc(20); // тут участок выровнен

int * i = mem + 1; // берем заведомо невыровненный адрес

*i = 4; // и вот идет обращение, тут blackfin даст ексепшн


в общем мне не ясна до конца задача, так что извиняюсь, если кого сбил с толку
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить