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

 
 
> Ламерской вопрос, массив unsigned char
Fortune
сообщение Feb 8 2007, 11:10
Сообщение #1


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

Группа: Свой
Сообщений: 75
Регистрация: 1-02-07
Из: Украина
Пользователь №: 24 940



Я с ARM еще не работал, но у меня появились вопросы.
Если обьявить массив типа unsigned char в ОЗУ
сколько будет занимать один элемент в памяти?
Можно ли сделать так, чтобы он занимал 1 байт?
Если нет, то как легче всего это сделать программно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DASM
сообщение Feb 8 2007, 12:37
Сообщение #2


Гуру
******

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



Значит компилер будет считывать 32-битное значения и выдирать сам байиы, если я правильно Вас понял. Массив в любом случае по адресам будет лежать слитно, иначе вся арифметика указателей летит к чертовой матери вместе с Керниганом и этим.. как его.. Ритчи
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Feb 8 2007, 13:19
Сообщение #3


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(DASM @ Feb 8 2007, 12:37) *
Значит компилер будет считывать 32-битное значения и выдирать сам байиы,

Тут уж, наверно, не компилер, а сам процессор.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Demeny
сообщение Feb 8 2007, 14:56
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(SpiritDance @ Feb 8 2007, 13:19) *
Цитата(DASM @ Feb 8 2007, 12:37) *

Значит компилер будет считывать 32-битное значения и выдирать сам байиы,

Тут уж, наверно, не компилер, а сам процессор.

Вы оба неправы, господа. Этим занимается аппаратно контроллер памяти (неважно какой, SDRAM, SRAM, DDR) - все эти дела совершенно прозрачны для программиста и для процессора, исполняющего команды программиста. smile.gif
Обратите внимание - несмотря на то, что разрядность шины данных процессора увеличивается (от 8 битных 8088, далее через 16 битные 8086/80286, через 32 битные 80386/Pentium-ы, а теперь есть и 64 битные ...) - ПО КАЖДОМУ АДРЕСУ ПАМЯТИ ЛЕЖИТ РОВНО ОДИН БАЙТ !!!
С точки зрения любого процессора (и программиста) физическая память является линейной структурой байтов, адрес каждого байта уникален и отличается от адреса предыдущего и последующего ровно на единицу.
32 разрядный процессор "хочет" загрузить себе в регистр один байт из адреса 0x123456FF, и его совершенно не волнует, каким образом внешняя память "исполнит его желание". Более того, проц не обязан "знать", что за память расположена по этому адресу. Дальнейшие действия целиком и полностью возложены на контроллер памяти, который всё это "знает". Если память 32 разрядная - будет выполнено ДВА цикла чтения - один по адресу 0x123456FC, другой по адресу 0x12345700, а оставшиеся два младших бита в исходном адресе будут определять, как расположить считанные 8 байт на 32 разрядной шине так, чтобы процесоор "почувствовал", будто он и вправду считал двойное слово с адреса 0x123456FF.
ДВА цикла чтения заменятся на ОДИН цикл в одном случае - если адрес кратен 4. Поэтому у программиста (который, в отличие от процессора, знает свою архитектуру аппаратной части) есть выбор - указать компилятору, как предпочтительнее располагать данные в памяти (align). Хочется сэкономить память - указывай align=1, но тогда при доступе к 3 элементам из 4 будешь "попадать" по времени на ДВА цикла чтения; если памяти море - указывай align=4 (вроде как это по умолчанию), тогда каждый объект массива char будет лежать "как король" в адресах, кратных 4, чтобы не тратить лишнее время на доступ к нему.
Если контроллер памяти очень "умный" - он может сильно ускорять процесс считывания, например, вести кэш, и недавно считанное значение не считывать заново, или при доступе по определённым адресам на чтение/запись генерировать исключения и т. п. Часть этих функций современные процессоры типа Pentium взяли себе на борт (кэш первого уровня, защита памяти и генерация исключений и т п), часть оставили снаружи (кэш второго уровня, разделение RAM/ROM).


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Fortune   Ламерской вопрос   Feb 8 2007, 11:10
- - SergeyDDD   все зависит от контроллера памяти и самой памяти г...   Feb 8 2007, 11:22
|- - Fortune   Цитата(SergeyDDD @ Feb 8 2007, 12:22) все...   Feb 8 2007, 11:26
|- - SergeyDDD   Цитата(Fortune @ Feb 8 2007, 12:26) Цитат...   Feb 8 2007, 11:57
- - etoja   При компиляции программы можно указать ключи для в...   Feb 8 2007, 11:34
- - DASM   по-моему ерунду говорите. Массив всегда будет расп...   Feb 8 2007, 12:00
|- - SergeyDDD   Цитата(DASM @ Feb 8 2007, 13:00) по-моему...   Feb 8 2007, 12:15
|- - Alex03   Цитата(Demeny @ Feb 8 2007, 16:56) Вы оба...   Feb 8 2007, 17:02
- - DASM   не важно кто, важно что для программисты массив ли...   Feb 8 2007, 13:23
- - IgorKossak   Сколько текста! Сколько времени потрачено...   Feb 8 2007, 13:38
- - DASM   ну я собсно и сказал - по барабану кто будет делат...   Feb 8 2007, 15:02
|- - Demeny   Цитата(DASM @ Feb 8 2007, 15:02) ну я соб...   Feb 8 2007, 15:34
- - SpiritDance   Ну я то под процессором имел ввиду сам мк, а не со...   Feb 8 2007, 15:49
- - DASM   "Массив char в физической памяти будет лежать...   Feb 8 2007, 15:51
|- - Demeny   Цитата(DASM @ Feb 8 2007, 15:51) "Ма...   Feb 8 2007, 16:30
- - DASM   И что ? Вы хотите сказать, что вашим шаманством я ...   Feb 8 2007, 16:39
|- - Demeny   Цитата(DASM @ Feb 8 2007, 16:39) И что ? ...   Feb 8 2007, 17:09
- - DASM   SSE4 это хорошо... а что с моим вопросом ?   Feb 8 2007, 17:05
- - DASM   мы по прежнему друг друга не понимаем. Не можете. ...   Feb 8 2007, 17:12
|- - Demeny   Цитата(DASM @ Feb 8 2007, 17:12) мы по пр...   Feb 8 2007, 17:23
- - DASM   через 13 байт. Слитно. Массива ! Будем продолж...   Feb 8 2007, 17:25
|- - Demeny   Цитата(DASM @ Feb 8 2007, 17:25) через 13...   Feb 8 2007, 17:31
|- - Kail   Цитата(DASM @ Feb 8 2007, 17:25) через 13...   Feb 8 2007, 18:03
- - DASM   я смотрел в RAM и вообще причем тут ROM-RAM. Удаля...   Feb 8 2007, 18:07
|- - Andrew2000   Help на Borland C++ Bulder: "The Data Alignm...   Feb 8 2007, 19:16
- - DASM   И чего ??? где тут слово array ? Я только structur...   Feb 8 2007, 19:20
|- - Andrew2000   Цитата(DASM @ Feb 8 2007, 19:20) И чего ?...   Feb 8 2007, 19:30
- - Alex03   По поводу игноригования младших битов адреса в ARM...   Feb 8 2007, 19:22
- - DASM   "А с точки зрения голых Сей результат должен ...   Feb 8 2007, 19:25
|- - Alex03   Цитата(DASM @ Feb 8 2007, 21:25) "А ...   Feb 8 2007, 19:45
- - DASM   ну а вот теперь сделайте из этих variables ARRAY -...   Feb 8 2007, 19:38
|- - Andrew2000   Цитата(DASM @ Feb 8 2007, 19:38) ну а вот...   Feb 9 2007, 01:36
- - DASM   ладно, возможно тут и промахнулся, и тем не менее ...   Feb 8 2007, 19:53
|- - Alex03   Цитата(DASM @ Feb 8 2007, 21:53) ладно, в...   Feb 8 2007, 20:06
- - tegumay   насчет хранения и форматирования данных в памяти э...   Feb 8 2007, 20:12
- - DASM   так... еще лучше.. кто глубже копнет :-D   Feb 8 2007, 20:14
- - gladov   DASM полностью прав!!! НЕ МОЖЕТ компил...   Feb 8 2007, 22:18
|- - Alex03   Цитата(gladov @ Feb 9 2007, 00:18) Хочу с...   Feb 9 2007, 07:05
|- - gladov   Цитата(Alex03 @ Feb 9 2007, 07:05) Мне во...   Feb 9 2007, 10:42
|- - Сергей Борщ   Цитата(gladov @ Feb 9 2007, 09:42) Почему...   Feb 9 2007, 11:23
|- - Alex03   Цитата(gladov @ Feb 9 2007, 12:42) ругает...   Feb 9 2007, 12:49
- - SpiritDance   Блин, сразу видно - DASM вернулся на форум. Ж) Из ...   Feb 9 2007, 10:08
- - DASM   да вы доки читайте ! тама написано, что это не...   Feb 9 2007, 11:19


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

 


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


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