Skip to content

Latest commit

 

History

History
97 lines (60 loc) · 7.69 KB

File metadata and controls

97 lines (60 loc) · 7.69 KB

Память

  1. Память в Swift от 0 до 1
  2. Memory Management in Swift: Heaps & Stacks
  3. Видео: Как работает память компьютера?

Что такое память?

Память - компонент компьютера, способный хранить в себе различную информацию (программы, картинки, текст и тд). В конечном виде любую информацию мы представляю как двоичное/бинарное число.

Байты

Основной единицей информации является бит, который равен 1 или 0 (абстракция над наличием или отсутствием тока ). Традиционно мы организовываем биты в группы по восемь, называемые байтами, тк процессор не может обращаться только к отдельному биту. Обращение может происходить только к какому-то байту.

Байт - минимальная ячейка (или октет) память, которая состоит из 8 бит.

Поэтому память это также просто длинная последовательность байтов, один за другим уходящих в даль. Но они расположены в определенном порядке. Каждый байт получает число, называемое его адресом (как на примере выше 0x7FFE4A71). По этому адресу процессор к нему обращается.

Виды адресации

Из-за того, что каждый байт имеет адрес, такой вид адресации называется байтовой.

Существуют компьютеры, у которых размер одной ячейки памяти (октета) равняется машинному слову (максимальное кол-во бит, которым процессор может оперировать за раз - обмениваться ими с ОЗУ (RAM), хранить их в регистрах). Пример: в 32х битных машинах размер машинного слова будет 32 бита и тд. Такая адресация называется словесная.

TypesOfAddress

Расположение байтов

При перессылке информации с одного компьютера на другой было неизвестно в каком порядке передается текст. Для ASCII стандарта такой проблемы нет, тк передается только один байт.

!!! Расположение битов внутри байтов всегда неизменно. Меняется расположение только самих байтов.

Bytes

  • big endian (прямой порядок) - слева направо;

  • little endian (обратный порядок) - в большинстве компьютеров байты располагаются справа налево;

Apple:

Both Apple silicon and Intel-based Mac computers use the little-endian format for data, so you don’t need to make endian conversions in your code.

Стандарты кодировки данных

  1. Как работают кодировки?

Диапазон данных

Тип данных Объем памяти Диапазон значений
1 Int8 1 байт от -127 до 127
2 UInt8 1 байт от 0 до 255
3 Int16 2 байта от -32768 до 32767
4 UInt16 2 байта от 0 до 65535
5 Int32 (дефолтный в 32-разрядной) 4 байта от -2147483648 до 2147483647
6 UInt32 4 байта от 0 до 4294967295
7 Int64 (дефолтный в 64 -разрядной) 8 байт от -9223372036854775808 до 9223372036854775807
8 Unt64 8 байт от 0 до 18446744073709551615
9 Float 4 байта от 1.2E-38 до 3.4E+38
10 Double 8 байт от 2.3E-308 до 1.7E+308
11 Bool 1 байт true/false
12 String 16 байт ASCII/UNICODE
13 Character 16 байт ASCII/UNICODE

В дополнение фреймворк Core Graphics поддерживает тип CGFloat, чей размер зависит от архитектуры и может быть аналогичен либо типу Float, либо типу Double.

Форматы записи числовых данных

По умолчанию Swift работает с десятичной системой исчисления. Однако, как и многие другие языки программирования, он может работать и с другими системами:

  • десятичная: числа используются так, как они есть, без каких-либо префиксов

  • двоичная: перед числом используется префикс 0b

  • восьмеричная: перед числом используется префикс 0o

  • шестнадцатеричная: перед числом используется префикс 0x

Например, запишем число 10 во всех системах исчисления:

let decimalInt = 10
let binaryInt = 0b1010      // 10 в двоичной системе
let octalInt = 0o12         // 10 в восьмеричной системе
let hexInt = 0xA            // 10 в шестнадцатеричной системе

3.1.1 About Memory Theme | Back To iOSWiki Contents | 3.1.1.2 ASCII vs UNICODE Theme