Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Про указатели, сейчас всех "загружу" :) 03.03.05 00:52 Число просмотров: 2636
Автор: leo <Леонид Юрьев> Статус: Elderman Отредактировано 03.03.05 00:58 Количество правок: 2
|
Причины, по-которым указатели могут быть "разными" в основном можно свести к двум вариантам:
1) Разная адресация к коду и данным.
Например код может находится в ПЗУ размер 64K, а RAM быть всего 4K. В такой ситуации RAM нужно очень сильно экономить, поэтому все константы "переежают" в ПЗУ.
Но тут может быть еще одна "хитрость", считать данные из ПЗУ в регистры общего пользования CPU можно только через порты ввода-вывода... В итоге, разница между const-указателями и не-const громадна.
Но можно сделать еще "круче". Чтобы не тратить время на "выуживание" данные из ПЗУ, можно в сегмент кода ложить только const char string[] ="bla-bla-bla", а все остальные const-ы, включая const char char_array[] = {'a', 'b', 'c'} ложить в RAM. Другими словами в ПЗУ ложить только const-строки используемые большей частью для выдачи сообщений...
Реальные примеры - модели памяти в 16-бит x86, когда указатель на код 16 бит, а на данные 32 бита, и наоборот. Или ATMEL (ATMEGA) с внутренним ПЗУ, очень "кучеряво";
2) "Многослойная" память (не знаю как сказать лучше).
Например, у процессора маленькая ширина шины адреса для RAM (когда его проектировали думали хватит). Позже, когда накопилось много кода и мегагерцев стало больше, решили "улучшить" CPU - расширили шину и добавили команды чтения записи слов (два байта) и удвоенных слов (четыре байта) и т.д.
При этом команды чтения/записи байтов, слов, двойных слов, и например адресов при косвенной адресации используют один и тот-же диапазон значений адреса, но обращаются к разным "своим" блокам RAM. В компиляторе для такого CPU char* по-определению не равен любому int*.
И опять таки схема может быть еще "хитрее" - первая половина адресов RAM может адресовать один блок памяти, а вторая половина - "персональные" блоки для байтов, слов и т.д.
Реальный пример - какая-то советская ЭВМ слежения за целями в ПВО.
P.S.
IMHO - Нет смысла думать об экзотике, для нее все равно придеться переписывать.
|
|
|