|
Динамический массив структур, Создание / удаление |
|
|
|
May 6 2009, 09:50
|

Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142

|
Здесь сказано: Цитата Размер структуры выравнивается до размера, кратному размеру его максимального элемента.
Сообщение отредактировал Злодей - May 6 2009, 09:53
|
|
|
|
|
May 6 2009, 10:25
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Если мы(Вы) имеем дело с С99 и gnu99, можно смело отменять выравнивание и пользоваться типами uint_fast**_t . Имхо, вручную проконтролировать оптимальное выравнивание гораздо лучше, чем потом носиться с прагмами и ком.строкой от компилера к компилеру. Тогда Цитата(Палыч @ May 6 2009, 12:07)  Выравнивание. Обычно его можно уменьшить с потерей скорости доступа, но не на всех платформах. приобретет другой смысл, а именно: выравнивание на разных платформах будет разным, без потери скорости доступа. Разумеется, для ввода/вывода за пределы системы, надо придерживаться детерминированных размеров, т.е. применять типы uint_**_t
|
|
|
|
|
May 6 2009, 10:47
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 9-01-09
Пользователь №: 43 070

|
А как определить, какой у меня компилятор, если пишу в Cross Works для мк LPC2214? И типов, начинающихся на uint_fast не нашла
Сообщение отредактировал YChebisheva - May 6 2009, 10:50
|
|
|
|
|
May 6 2009, 10:54
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(_Pasha @ May 6 2009, 13:25)  Если мы(Вы) имеем дело с С99 и gnu99, можно смело отменять выравнивание и пользоваться типами uint_fast**_t . Имхо, вручную проконтролировать оптимальное выравнивание гораздо лучше, чем потом носиться с прагмами и ком.строкой от компилера к компилеру. В огороде бузина, ну а дядька соответственно в Киеве. Паковка/не паковка структур не зависит от использования в структурах свежих С99 типов входящих в нее переменных. Любую мысль следует выражать максимально прямо, даже если для этого pragma требуется  . fast, least зачастую очень странно интерпретируются компиляторами - получал в практически одинаковых условиях и 8 и 32bit переменные  . На данный момент предпочитаю создавать свои собственные типы и явно переопределять их в зависимости от платформы.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 6 2009, 12:04
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 9-01-09
Пользователь №: 43 070

|
с типами разобралась. А может лучше объявить всю структуру как packed?
Сообщение отредактировал YChebisheva - May 6 2009, 12:08
|
|
|
|
|
May 6 2009, 12:09
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(YChebisheva @ May 6 2009, 14:56)  А как определить, какой у меня компилятор, если пишу в Cross Works для мк LPC2214? Это сложно, поскольку это еще зависит от географических координат Вашего местоположения, возраста,.... А если серьезно, то посмотрите САМИ какой конкретно из GNU компиляторов запускаете из, полагаю, Rowley-евской оболочки.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 6 2009, 12:33
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 9-01-09
Пользователь №: 43 070

|
.
А как определить, какой у меня компилятор, если пишу в Cross Works для мк LPC2214?
Сообщение отредактировал YChebisheva - May 6 2009, 12:33
|
|
|
|
|
May 6 2009, 15:13
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(zltigo @ May 6 2009, 13:54)  fast, least зачастую очень странно интерпретируются компиляторами - получал в практически одинаковых условиях и 8 и 32bit переменные  . С точки зрения гнуся несложно представить себе ситуацию, когда в stdint.h какого-нить ГЦЦ для АРМа появится к примеру такое: Код typedef int __attribute__((special_treatment_for_8bit)) int_fast8_t; где special_treatment_for_8bit - гипотетический атрибут, позволяющий опробовать новую стратегию оптимизатора. Не вижу ничего плохого. Цитата(YChebisheva @ May 6 2009, 15:33)  А как определить, какой у меня компилятор, если пишу в Cross Works для мк LPC2214? запустите компилятор с ключем --verbose
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|