JavaRush /Курсы /Модуль 1: Python Core /Оперативная память и представление данных

Оперативная память и представление данных

Модуль 1: Python Core
15 уровень , 7 лекция
Открыта

8.1 Оперативная память

Оперативная память (RAM, ОЗУ) компьютера представляет собой массив ячеек памяти, каждая из которых имеет уникальный адрес. Эти ячейки могут хранить данные различного типа, такие как числа, символы и указатели. Когда программа выполняется, она размещает свои данные и инструкции в этой памяти для быстрого доступа.

Пример ячеек памяти:

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79

У каждой ячейки есть её порядковый номер, его ещё называют адресом ячейки в памяти или просто адресом. Если у вашего компьютера 8 Гб памяти, то у него 8 миллиардов таких ячеек, в которых можно хранить что-нибудь полезное.

Биты и байты

Каждая ячейка может хранить один байт информации. Каждый байт состоит из 8 битов, а каждый бит может содержать только 0 или 1. Пример (для целых положительных чисел):

Число Битовое представление Округленное до байта
0 0 00000000
1 1 00000001
100 1100100 01100100
1000 1111101000 00000011-11101000
1000 000 000 111011100110101100101000000000 00111011-10011010-11001010-00000000

Чем больше байт занимает переменная, тем больше значений в ней можно хранить. Пример:

  • 1 байт — 256 уникальных значений
  • 2 байта — 65 тыс. уникальных значений
  • 3 байта — 16 миллионов
  • 4 байта — 4 миллиарда

8.2 Как данные представляются в памяти

Типы данных и их представление

Числовые данные внутри процессора и в памяти

  • Целые числа: хранятся в двоичной форме. Размер может варьироваться (1 байт, 2 байта, 4 байта).
  • Вещественные числа: хранятся в формате с плавающей точкой (например, формат IEEE 754 для 4-байтных и 8-байтных чисел).

x = 42  # Целое число
y = 3.14  # Вещественное число

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

Символьные данные в памяти компьютера

Символы и строки хранятся в памяти в виде последовательностей байтов. Например, в кодировке ASCII каждый символ занимает 1 байт, в кодировке UTF-8 может занимать от 1 до 4 байтов.

В Python 3.x по умолчанию для строк используется кодировка UTF-8, но вы можете читать файлы, где текст хранится в других форматах, или пересылать данные по сети не в кодировке UTF-8.

Пример:


char = 'A'  # Символ
string = "Hello, world!"  # Строка

Отдельные символы в Python не имеют своего типа — для них также используется тип str. Однако в памяти эти строки хранятся посимвольно. Один символ обычно занимает 1—4 байта.

Указатели

Указатели хранят адреса других ячеек памяти. Они позволяют программам работать с динамическими структурами данных и эффективнее управлять памятью.

Пример:


list = [1, 2, 3, 4]  # Список
list_pointer = id(list)  # Указатель на начало списка

8.3 Примеры представления данных в оперативной памяти

1. Представление целых чисел

Целые числа хранятся в памяти в виде двоичных чисел (битов). В зависимости от типа данных они могут занимать различное количество байтов. Например, int обычно занимает 4 байта (32 бита).

Вот так в памяти будет представлено число 42:

00000000 00000000 00000000 00101010

2. Представление вещественных чисел (с плавающей точкой)

Вещественные числа (например, тип float) хранятся в памяти в формате с плавающей точкой, обычно по стандарту IEEE 754. float обычно занимает 4 байта (32 бита), а double — 8 байтов (64 бита).

Важно! Это стандартные типы данных, привязанных к памяти и процессору. Тип float в Python соответствует общеупотребимому типу double и занимает 8 байт.

Вот так в памяти будет представлено число 3.14:

01000000 01001000 11110110 01100110

3. Представление символов и строк

Символы (например, тип char) хранятся в памяти в виде последовательности байтов. Строки представляют собой массив символов. В языках C/C++ строки оканчиваются нулевым байтом (\0), но в Python это не так.

Вот так в памяти будет представлена строка Hello:

'H' 'e' 'l' 'l' 'o'

Что в свою очередь будет представлено в виде 0 и 1:

01001000 01100101 01101100 01101100 01101111

8.4 Адресация динамической памяти

Динамическая память выделяется и освобождается во время выполнения программы, по мере необходимости. Все объекты, которые вы создаёте в Python, создаются в этой памяти.

Она делится на 2 типа:

Куча (Heap): Область памяти, из которой выделяются динамические объекты. Управление этой памятью осуществляется через функции выделения (например, malloc в C) и освобождения (например, free в C).

Стек (Stack): Область памяти, используемая для хранения локальных переменных и данных вызова функций. Память автоматически выделяется и освобождается при входе и выходе из функции.

Опять-таки, я не могу привести пример на языке Python, так как он слишком высокоуровневый для таких действий. Могу опять дать пример на языке С:


// Динамическое выделение памяти для массива из 10 целых чисел
int *dynamic_var = (int *)malloc(sizeof(int) * 10); 

// Освобождение памяти
free(dynamic_var);  

Адресация памяти — это процесс определения уникального адреса для каждой ячейки памяти. Каждый адрес указывает на конкретное местоположение в памяти, которое может содержать данные или инструкции.

Типы адресации

Физическая адресация: прямой доступ к физическим адресам ячеек памяти. Управляется аппаратным обеспечением (например, контроллером памяти).

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

2
Задача
Модуль 1: Python Core, 15 уровень, 7 лекция
Недоступна
Двоичное представление
Двоичное представление
2
Задача
Модуль 1: Python Core, 15 уровень, 7 лекция
Недоступна
Преобразуем число в десятичное
Преобразуем число в десятичное
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 64
7 августа 2025
Задания: >>> Напишите программу, которая принимает целое число от пользователя, преобразует его в >>> двоичное представление и показывает, как оно будет храниться в памяти. В каком месте этой лекции было рассказано как это делать? Имхо, для этой лекции больше подошел бы тест, а не задания на преобразования