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