Краткое объяснение компьютерной памяти
Все мы разбираемся в компьютерах и часто слышали такие термины как «ОЗУ», «жесткий диск», «гигабайт», «бит», «память», но что всё это на самом деле значит?
Память и жесткий диск: в чем разница?
Компьютерная память - это система, которую компьютер использует для представления и хранения данных для немедленного использования и в основном состоит из оперативной памяти (RAM). RAM содержит данные и инструкции, которые используются в настоящее время; эти данные доступны быстро и теряются при выключении компьютера.
Вот тут-то и пригодится ваш жесткий диск.
Основная часть данных компьютера (программы, файлы и т. Д.) хранится на жестком диске. Данные на жестком диске сохраняются, когда компьютер выключен и отсоединен от сети. Доступ к этим данным занимает больше времени, но емкость хранилища намного больше.
Что за чушь про гигабайты и терабайты?
Емкость. Мера того, сколько двоичного кода может хранить компьютер. Теперь, когда мы знаем, что компьютер может хранить данные в оперативной памяти и на жестком диске, мы можем ожидать два значения, глядя на характеристики емкости компьютера.
Какое отношение двоичный файл имеет к емкости хранилища?
Двоичная система счисления состоит из двух чисел: 0 и 1. Компьютеры понимают только электрические сигналы, где сигнал ВЫКЛ представлен 0, а ВКЛ - 1. Двоичный код использует эти 0 и 1 для представления данных, например, буквы или цифры. Каждый из этих нулей или единиц называется битом.
Два бита могут быть представлены 2² или 4 способами: 00, 01, 10, 11.
Три бита могут быть представлены 2³ или 8 способами: 000, 001, 010, 011, 100, 101, 110 или 111.
Восемь битов, также называемых байтами, могут быть представлены 2⁸ или 256 способами.
Как видите, по мере увеличения количества бит количество данных, которые могут быть представлены, увеличивается экспоненциально.
Вот какое отношение двоичный файл имеет к объему памяти вашего компьютера.
Не все виды памяти равны
Stack vs Heap память
Во-первых, оба вида памяти являются частью ОЗУ. Итак, в чем разница?
Stack-память - это локальная память. Когда функция - назовем ее функцией A - вызывается, для функции A создается новый фрейм стека. Если вы добавляете переменные в функцию A, они сохраняются в ее фрейме стека. Когда вызывается новая функция - функция B, фрейм стека для функции A сохраняется в памяти стека, и создается новый фрейм стека для функции B. Когда функция B завершается, ее фрейм стека удаляется из памяти, и то же самое происходит с функцией A после ее завершения.
ПРИМЕЧАНИЕ: объем памяти стека ограничен. Вы когда-нибудь случайно писали бесконечный цикл, и полученная вами ошибка была чем-то вроде «maximum call stack size exceeded»? Теперь вы знаете немного больше о том, что происходит!
Heap-память - это динамическая память. Она выделяется при вызове функции. В Heap-памяти хранятся более крупные непримитивные структуры данных, такие как словари и списки. Переменная, ссылающаяся на структуру данных, остается в стековой памяти и указывает на сам объект, хранящийся в динамической памяти. Когда программа завершает выполнение, память очищается, как описано выше.
ПРИМЕЧАНИЕ: некоторые языки, такие как C, требуют, чтобы вы выделяли и освобождали память вручную, в то время как другие, такие как JavaScript или Python, позаботятся об этом за вас.