информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медСетевые кракеры и правда о деле ЛевинаСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Утекший код XP и Windows Server... 
 Дела виртуальные 
 Простое пробивание рабочего/провайдерского... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Про указатели, сейчас всех "загружу" :) 03.03.05 00:52  Число просмотров: 2107
Автор: 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 - Нет смысла думать об экзотике, для нее все равно придеться переписывать.
<programming> Поиск 








Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2020 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach