реклама на сайте
подробности

 
 
> Структура в Си, Что это такое?
Anjey_N
сообщение Aug 9 2007, 07:30
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Пытался сам понять из книжек что такое структура и зачем она применяется но ничего не понял! Может ли кто-нибудь объяснить зачем она нужна?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Aug 9 2007, 11:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Структура это такая абстракция, которая введена в ЯВУ для того, чтобы человеку было удобно работать с данными. Самому же процессору/микроконтроллеру структуры по барабану, он работает не с абстракциями, а с реальными адресами/данными.
Преобразовать абстрактные структуры к реальным данным это задача компилятора. Основная проблема при этом возникает при упаковке и выравнивании структур. А все из-за того, что у разных CPU/MCU разные разрядность шины и способ обращения к данным. Например, у большинства 16-ти разрядных CPU нельзя сделать обращение к 16-битному слову по нечетному адресу. Поэтому, если допустим в неупакованной структуре вы опишите две байтовые (8-ми битные) переменные и попытаетесь обратиться к ним как к одной 16-разрядной переменной, то на разных CPU/MCU можете получить различающиеся артефакты. Поэтому не забывайте о выравнивании структур.
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Aug 9 2007, 12:14
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059



Цитата(rezident @ Aug 9 2007, 14:04) *
Самому же процессору/микроконтроллеру структуры по барабану, он работает не с абстракциями, а с реальными адресами/данными.

Хочу уточнить. Как раз для АВР его система команд "помогает" компилятору С может сгенерировать очень качественный код при работе со структурами (см. AN035).
Так что чем использовать разрозненные объекты -- я бы склонялся к использованию структур
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 9 2007, 14:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(korobov_michael @ Aug 9 2007, 18:14) *
Как раз для АВР его система команд "помогает" компилятору С может сгенерировать очень качественный код при работе со структурами (см. AN035).

Компилятор Си основывается на системе команд MCU, поэтому не совсем понятен контекст вашей фразы. Помочь компилятору может сам программист. Точнее его стиль написания программы на Си. Если программист пишет, предполагая как бы он писал эту же программу на ASM, то и компилятор сгенерирует код близкий к предполагаемому.
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Aug 9 2007, 20:48
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059



Цитата(rezident @ Aug 9 2007, 17:35) *
Компилятор Си основывается на системе команд MCU, поэтому не совсем понятен контекст вашей фразы. Помочь компилятору может сам программист. Точнее его стиль написания программы на Си. Если программист пишет, предполагая как бы он писал эту же программу на ASM, то и компилятор сгенерирует код близкий к предполагаемому.

М-да, пожалуй, коряво получилось... Имелось ввиду, что при использовании структуры при последовательном обращении к полям структуры компилятор задействует косвенный режим адресации со смещением, являющийся частью архитектуры, что и приводит к более оптимальному коду по сравнению с рядом других контроллеров
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 9 2007, 21:18
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(korobov_michael @ Aug 9 2007, 23:48) *
М-да, пожалуй, коряво получилось... Имелось ввиду, что при использовании структуры при последовательном обращении к полям структуры компилятор задействует косвенный режим адресации со смещением, являющийся частью архитектуры, что и приводит к более оптимальному коду по сравнению с рядом других контроллеров


Не буду Вам возражать. Возможно немного огорчу. smile.gif Если Вы даже и не используете структуру, то компилятор разрозненные данные тоже групирует и также использует косвенный режим адресации со смещением, являющийся частью архитектуры, что и приводит к более оптимальному коду по сравнению с рядом других контроллеров

Хотя это никоим образом не умаляет важность и удобство структур. smile.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016