Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [kernel] выравнивание всех полей, есть ли единая инструкция gcc 
:(
    Опции темы
null56
Дата 20.2.2013, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 4
Всего: 12



Добрый день

На одном процессоре возникла ситуация, когда требуется, чтобы все поля структуры были выровнены по 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))));


Заранее благодарен всем откликнувшимся
PM MAIL   Вверх
gormih
Дата 28.3.2013, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.7.2007

Репутация: 1
Всего: 1



Ключ  именно для struct такой вряд ли есть. 
Никто не мешает расковырять исходники компилятора в части размерности данных, и заставить их всегда быть кратными 4 байтам. smile
Правда будет не весело, когда int8_t будет занимать 32 бита...

Это сообщение отредактировал(а) gormih - 28.3.2013, 16:55
PM MAIL   Вверх
borisbn
Дата 28.3.2013, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



 > аналог (push4 pop4 в msvc)?
А что, pragma pack 4 не работает?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 28.3.2013, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(gormih @  28.3.2013,  16:54 Найти цитируемый пост)
Никто не мешает расковырять исходники компилятора в части размерности данных, и заставить их всегда быть кратными 4 байтам

это чтоб просто выровнять данные чтоле?
 smile 
PM MAIL   Вверх
borisbn
Дата 28.3.2013, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



volatile, чоткие посоны простых путей не ищут.
а ещё стоит отметить, что ТС спрашивал не про размерность данных


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
null56
Дата 29.3.2013, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 4
Всего: 12



borisbn, на самом деле железячники мне неверно объяснили...
Упаковщик работает верно, как ты и сказал, падение может происходит не из - за упаковки.
Если я правильно понял, то упасть blackfin может в следующем случае
Код

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

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

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


в общем мне не ясна до конца задача, так что извиняюсь, если кого сбил с толку

Добавлено через 3 минуты и 23 секунды
а вот как это связано со структурами и выравниванием полей структур, я пока не понял
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.