Найти тему
D21nk Master

Такая память никогда не подводит

Что такое указатели и для чего они нужны более или менее разобрались.Сейчас речь пойдёт об работе оперативной памяти.

Признаться,точно не ясно в какой цикл статей больше подойдёт данная тема,потому как понимание механизма памяти пригождается не только в программировании.И всё же эту тему так же изучают программисты,начнём.

Как выглядят адреса мы уже видели-просто шестнадцатеричные числа (0x11ac1),но где же они располагаются? У оперативной памяти есть "виртуальное управление",которое точно распределяет что где и как должно находиться.Позвольте показать:

Соберите эту программу

void main()
{
char a,b;
printf("0x%x\n0x%x\n",&a,&b);
}

В данной программе мы печатаем адреса двух переменных char,как мы помним данных тип данных занимает один байт.После запуска можно заметить занимательную вещь-в памяти они располагаются рядом.

То есть если адрес переменной a будет заканчиваться на 0x46cdf621,то адрес переменной b будет непременно следующим-0x46cdf622.

Запустите эту программу несколько раз,для наглядности.

Можете так же собрать программу с массивом любого типа данных и в цикле проверить адреса каждого элемента,очень любопытно.

Теперь собственно где всё это располагается.Все статичные переменные,а мы пока работали только с такими располагаются в стеке.

Стек можно сравнить с магазином в пистолете,последнийзаряженный патрон выстреливает первым.Так собственно стек и работает,чем позже был добавлен элемент в него-тем он доступнее.

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

Все наши операторы,функции,вызовы,всё это так же хранится в оперативной памяти на время работы программы.Собственно тут ничего сложного,отдельный сегмент памяти,в котором хранится текст.

В завершение загадаю вам загадку:

void main()
{
char *hello="Hello world!"
printf("%s\n",hello);
}

Почему это работает и почему если вывести адрес-то будет всего лишь один байт,а у нас их тут 13?!Желаю удачи!