Из этой лекции вы узнаете, как хранятся значения.
К моменту прочтения этого материалы вы должны уже знать, что значения делятся на виды и хранятся в памяти компьютера как литералы, переменные или константы.
Для хранения значения, в операционном запоминающем устройстве (ОЗУ) компьютера, выделяется некоторая область, состоящая из элементов памяти. Каждый такой элемент представляет собой электронный компонент содержащий конденсатор.
Конденсатор имеет свойства удерживать электрический заряд, т.е. находится в двух состояниях заражено или разряжено. Эту особенность конденсатора можно описать двоичной системой, где 1 — заряжено, 0— разряжено. Таким образом в распоряжении программиста оказывается, электронный программируемый прибор, который может хранить либо ноль, либо единицу, что является самой маленькой единицей данных — бит.
В памяти компьютера конденсаторы группируются по восемь штук. Такая группа называется адресная ячейка. Адресная ячейка — это ячейка памяти с автоматически назначенным адресом вида 0x7fffa40c5fac. При написании кода, подменяется удобочитаемым и информативным именем переменной. К примеру, string text, где имя text подменяет автоматически присвоенный адрес.
Размер адресной ячейки составляет 8 бит или один байт Адресная ячейка способна хранить целочисленное значение от 0 до 255. Сами адресные ячейки так же могут группироваться в блоки, вплоть до 64 конденсаторов или 64 бита или 8 байт. Такие блоки могут хранить гигантские числа. К примеру, размер известного типа данных int равен 4 байта и может хранить число равное приблизительно 4,5 миллиарда.
Для наглядного представления возьмите листочек или тетрадь в клеточку, развивайте мелкую моторику, я же буду использовать таблицу Excel.
Представим, что лист — это память компьютера, где каждая клеточка — это элемент памяти, которая содержит электронный компонент — конденсатор.
Запустим VS и объявим переменную для хранения числового значения
static void Main(string[] args)
{
byte number;
}
Здесь тип данных byte указывает на выделение в памяти компьютера блока из восьми элементов, поэтому, на тетрадном листке выделите блок из восьми клеточек и пронумеруйте их. Будем считать, что каждая клеточка — это элемент памяти, содержащий конденсатор.
Так как в переменной нет значения, то все конденсаторы будут разряжены. Дополните рисунок.
Запишем в переменную значение, в виде числа 120.
static void Main(string[] args)
{
byte number;
number = 120;
}
Что бы сохранить значение, нужно зарядить конденсаторы в соответствующих элементах выделенного блока (области) памяти. Измените рисунок
Так как для удобства описания состояния конденсатора используется двоичная система, то воспользуемся этим свойством и добавим, как выглядит число 120 в двоичной системе.
Визуально видно, для хранения числа 120 в выделенном области памяти необходимо сохранить заряд в элементах (конденсаторах) находящихся в позиции 7, 6, 5, 3, 2.
Таким образом за счет свойства конденсатора— заряжено-разряжено в памяти компьютера сохранено значение в виде числа. Числовые значения представляют собой единый неделимый элемент, который хранится в стеке памяти, что обеспечивает быстрый доступ к значению числового типа. Значения хранимые в стеке относятся к примитивным типам данных.
Совершенно по-другому хранится строковое значение. Так как в памяти компьютера могут хранится только числа в двоичной системе, а строковое значение состоит из букв, символов, то для хранения строкового значения в памяти компьютера используется следующий механизм. Строковое значение разбивается на отдельные буквы, символы, где каждому символу сопоставлено числовое значение. Информация о соответствии символа и его числового значения отражена в таблице ASCII.
После того как символы строки преобразованы в массив отдельных числовых значений, этот массив помещается для хранения в особую область памяти — куча, а в стеке, для доступа к этому массиву, создается ссылка с именем, что и дало название таким типам данных — ссылочные типы данных. Имя ссылки указывает не на само строковое значение, а на числовое значение, в котором хранится информация, где в куче искать строковое значение.
Для примера возьмем имя основателя компании Microsoft - Bill. Этот объект состоит не из чисел, но из символов отличных от чисел. Для хранения значения Bill разделим объект-строку на отдельные элементы в виде объект-число. В данном случае это буквы —B, i, l, l и в соответствии с таблицей ASCII, строка будет выглядеть как набор отдельных элементов числовых значений — 66 105 108 108.
После преобразования, значения Bill в числовые значения 66, 105, 108, 108, эти элементы - числа записываются в памяти компьютера — куча.
Внимание!!! Нижеприведённый пример ссылки на местоположение элементов значения приведен в качестве визуального оформления.
Ссылка хранится в стеке и имеет имя. По имени вы обращаетесь к ссылке, которая перенаправляет вас к нужному значению в куче. Ссылка 32 бита.
Хранение элементов в куче
Так как строковое значение представлено набором элементов, то мы можем обратится к каждому элементу в отдельности. Помятую, что имя указывает на ссылку, а ссылка перенаправляет к значению, для доступа к элементу используется следующая конструкция — имя ссылки[индекс элемента], где индекс элемента — номер хранения элемента в значении. Нумерация элементов начинается не с единицы, но с нуля.
Для этого нам необходимо указать имя ссылки «text» и индекс расположения элемента в значении.
static void Main(string[] args)
{
string text = "Bill";
Console.WriteLine("Вторая элемент значения - " + text[1]);
}
Конструкция — text[1], отдает команду на вывод содержимого одного из элементов переменной « text » с индексом « 1 ». Вывод на экран одного элемента значения свидетельствует о раздельном хранении его элементов.
Хранение значение происходит в адресных ячейках состоящих из восьми элементов, каждый из которых содержит конденсатор. Хранение описывается с помощью двоичной системы. Разделяют хранение в стеке — примитивные типы данных и в куче — ссылочные типы данных.
Зная, как хранятся значения в памяти компьютера дадим определение переменной.
Переменная — именованная область памяти, выделенная в памяти компьютера для хранения изменяемого значения с определенными характеристиками.
Под выделенной областью памяти понимается блок из ячеек (контейнер), выделенный из общего пространства оперативного запоминающего устройства (память компьютера), доступ к которому осуществляется по присвоенному имени. На самом деле доступ осуществляется по назначенному адресу вида — 0x7fffa40c5fac, но такой адрес трудночитаем и подменяется более информативным именем переменной вида — number.
Под характеристиками понимается тип данных значения, т.е. число или строка. Чуть позже вы узнаете, что несмотря на схожесть числовых значений, они так же делятся на типы.
На этом занятие закончено.
Вы можете самостоятельно найти задачи для закрепления теоретического материала или написать — basicprog@mail.ru.
Удачи в выполнении практических заданий!