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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выравнивание структур по GCC-шному! прошу написать пример 
:(
    Опции темы
EvilsInterrupt
Дата 24.9.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



В gcc есть старый тип выравнивания, описанный тут , вот цитато:
Цитата

aligned (alignment) 
This attribute specifies a minimum alignment (in bytes) for variables of the specified type. For example, the declarations: 
          struct S { short f[3]; } __attribute__ ((aligned (8)));
          typedef int more_aligned_int __attribute__ ((aligned (8)));


Прошу написать, кого-нибудь пример простой структуры выравненой на 1, 2, 4 и 8 байт! 

Для чего  нужно?

Это нужно мне для того чтобы создать портабельное выравнивание, пока сделал такой макрос:
Код

#if (SDK_COMPILER==SDK_COMPILER_GNUC)
  #define  PACKED_STRUCT  __attribute__ ((packed))
#else
  #define  PACKED_STRUCT
#endif


применять буду так:

Код

#include <PshPack1.h>

typedef struct _FILE_HEADER {
  uint32_t  signature;
  uint64_t  offset;
// много полей дальше
} PACKED_STRUCT  FILE_HEADER;

#include <PopPack.h>


как видно для MSVC придумано выравнивание, а вот для GCC еще нет! ;) Потому прошу написать примеры, под рукой GCC , к сожалению (

ЗЫ:
Предвидя вопросы "А почему нельзя заюзать совместимое с MSVC #pragma push ?" скажу что этого требует ситуация! Поэтому то выравнивание что поддерживает современный GCC очень нравится, но нужно и на старые, такова ситуация!

Это сообщение отредактировал(а) EvilsInterrupt - 24.9.2010, 13:13
PM MAIL WWW ICQ Jabber   Вверх
null56
Дата 26.9.2010, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(EvilsInterrupt @  24.9.2010,  13:09 Найти цитируемый пост)
Прошу написать, кого-нибудь пример простой структуры выравненой на 1, 2, 4 и 8 байт! 

может быть как - то так
Код

#define ALIGN_FACT 8
#define ALIGN __attribute__((aligned(ALIGN_FACT)))

struct __attribute__((packed)) MyStruct
{
        char ALIGN a;
        int ALIGN b;
        long ALIGN c;
        char ALIGN d;
};

int main()
{
        MyStruct my;
        printf("a = %d, b = %d, c = %d, d = %d\n", &my.a, &my.b, &my.c, &my.d);
        return 0;
}

я правда не уверен в корректности своих действий и не знаю, как тебе заточить упаковку каждого поля структуры в макрос... если только каким - то образом создавать псевдонимы на базовые типы в инключах, но вроде такие фокусы делать нельзя
PM MAIL   Вверх
EvilsInterrupt
Дата 26.9.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



null56, 
Буду рад если обратишь внимание на мою просьбу:
>>Прошу написать, кого-нибудь пример простой структуры выравненой на 1, 2, 4 и 8 байт! 

smile Она говорит о том что нужно написать структуру и добавить директив выравнивающих на  границу 1 или 2 или 4 или 8. Мне  нужен пример! ;)
Зная как это делается в GCC , смогу сделать это портабельно!
PM MAIL WWW ICQ Jabber   Вверх
EvilsInterrupt
Дата 26.9.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



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

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

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


 




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


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

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