Показать сообщение отдельно
Старый 26.07.2006, 21:18   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Плохо Туториальчик по Связанным спискам

Списки.
Сразу предупреждаю: статья является моим субъективным мнением, и гуру программирования покажется весьма условной и поверхностной. Но всё же для большинства начинающих, на мой взгляд, покажет преимущества и недостатки такого рода организации памяти - как связанные списки.

Отступление:
Одно из проявлений какого-то архетипа мышления пользователя (видео-файл – видео, mp3 – музыка: ну никак не желаю многие себе представить что это одни и те же буковки по разному обработанные). Так вот одно из проявлений этого архетипа – что массив нечто большее, чем просто переменная. Безусловно – во многих средах об этом вообще сложно догадаться – все низкоуровневые команды скрыты от глаз пользователя (от греха подальше). А между тем – переменная-массив (на нижеследующем рисунке map) всего лишь так или иначе сохранённый адрес одного(!) байта в памяти (мои скромные познания в языках – подсказывают мне, что утверждение весьма спорное – но не исключающее факта сохранения адреса). Что просто-таки бросается в глаза, если реализовать данную ситуацию на С++ (см. рисунок). Доступ ко всем элементам массива осуществляется из знания адреса и размера «места» занимаемого одним элементом ( размер определяется исходя из типа массива, который так или иначе указывается при инициализации {опять же за все среды не ручаюсь}). Так в С++ обращение к массиву:
map[2]=1;
где [] - это всего лишь оператор перегруженный для всех объектов массивов независимо от их типа его работа заключается в том, что он берёт левый операнд (адрес первого байта) и прибавляет к нему число, переданное в качестве правого операнда (2), помноженное на размер одного элемента (в данном случае – целочисленный массив – 4 байта на число). Таким образом, приведённая выше конструкция при значении адреса первого байта массива, допустим 5, вернёт после своего выполнения 5+2*4=5+8=13. После чего по адресу 13 (соответственно 13,14,15 и 16ый адреса) будет записано число равное единице.
Так же стоит ознакомиться с понятием – косвенная адресация. Вот цитата из
Википедии
Адресацией называется указание адреса (номера) регистра (ячейки) памяти или шага программы. В калькуляторах предусмотрено 2 вида адресации — прямая и косвенная.

Прямая адресация. Непосредственное указание адреса называется прямой адресацией («это число помести в регистр 4»).

Косвенная адресация. Если адрес указывается числом хранящимся в регистре памяти, то адресация будет косвенной («в регистр 4 узнай в какой регистр поместить это число»). Этот регистр называется регистром адресации. Его нельзя будет использовать для хранения исходных данных или промежуточных результатов.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Igor (22.05.2010)