- Память в Swift от 0 до 1
- Memory Management in Swift: Heaps & Stacks
- Видео: Как работает память компьютера?
Память - компонент компьютера, способный хранить в себе различную информацию (программы, картинки, текст и тд). В конечном виде любую информацию мы представляю как двоичное/бинарное число.
Основной единицей информации является бит, который равен 1 или 0 (абстракция над наличием или отсутствием тока ). Традиционно мы организовываем биты в группы по восемь, называемые байтами, тк процессор не может обращаться только к отдельному биту. Обращение может происходить только к какому-то байту.
Байт - минимальная ячейка (или октет) память, которая состоит из 8 бит.
Поэтому память это также просто длинная последовательность байтов, один за другим уходящих в даль. Но они расположены в определенном порядке. Каждый байт получает число, называемое его адресом (как на примере выше 0x7FFE4A71
). По этому адресу процессор к нему обращается.
Из-за того, что каждый байт имеет адрес, такой вид адресации называется байтовой.
Существуют компьютеры, у которых размер одной ячейки памяти (октета) равняется машинному слову (максимальное кол-во бит, которым процессор может оперировать за раз - обмениваться ими с ОЗУ (RAM), хранить их в регистрах). Пример: в 32х битных машинах размер машинного слова будет 32 бита и тд. Такая адресация называется словесная.
При перессылке информации с одного компьютера на другой было неизвестно в каком порядке передается текст. Для ASCII стандарта такой проблемы нет, тк передается только один байт.
!!! Расположение битов внутри байтов всегда неизменно. Меняется расположение только самих байтов.
-
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 | 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