#pragma - это расширение конкретной платформы. Стандарт
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено dxp 02 сентября 2004 г. 10:08
В ответ на: Не надо на всех моих компилятор есть... чтона ИАРе, что на Borlande, что на VC.. отправлено lamerok 02 сентября 2004 г. 09:47

говорит, что если в тексте встречается прагма, которую компилятор не знает, он должен ее проигнорировать. На Ваших трех компиляторах есть такая прагма и синтаксис ее совпадает. Рад за Вас, повезло. Но завтра у Вас появится четвертый компилятор, который не имеет этой прагмы или она у него по-другому делается. Эту вашу он пропустит и ошибка втихаря вылезет во всех красе!

Насчет "дырок". "Дырки" - это не как попало. Это особенности железа. Тот же MSP430 не может выбирать 16-битные данные по нечетному адресу. Поэтому там и возникает выравнивание. Когда вы напишете

char a;
int b;

то уже между а и b возникнет та самая "дырка". Безо всякой структуры.

Если структура:

struct TSlon
{
char a;
int b;
} Slon;

то при обращении

int x = Slon.b;

компилятор сгенерирует одну команду пересылки. А в случае подавленного выравнивания он будет вынужден сгенерить кучу лишнего кода, чтобы извлечь половинки инта и склеить их. Оверхед на этой операции многократный. Если он вас не волнует, то, действительно, проблем нет. Но я предпочитаю не транжирить и без того невеликую производительность 430-го на проблемы на пустом месте.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru