адрес 13,221 и адрес 13,222 разделены 8 битами?16?32?
8 бит, почти всегда
У каждого отдельного бита есть адрес?
Нет, только байты.Один использует другие средства для получения значения определенных битов.
Если размер изменяется, определяется ли конкретный размер аппаратным обеспечением?Формат диска?Операционная система?Компилятор / переводчик?
Размер не меняется, и он сильно зависит от оборудования.
Если я храню байт данных только в 16-битном пространстве, как это реализовано?Делается ли это, по умолчанию крайние левые 8 битов равны 0, например, записывая «12» как «0012» путем сравнения с основанием 10?
Я не совсем понимаю, что вы имеете в виду под 16 битамипространство.Если вы рассматриваете 2-байтовую память, каждый байт имеет адрес (как в каждой памяти), а если записан байт, он записывается по адресу, указанному компьютером.Таким образом, в 16-битной памяти есть два байта по адресам 0 и 1.
Но, может быть, вы имели в виду, «если у меня есть адрес 16-битного слова, и я использую его для записи байта, где он будетнаписано?».На самом деле, это зависит от компьютера.В некоторых компьютерах адрес слова является адресом его младшего значащего байта (они называются little endian , а архитектура x86 имеет этот характер), в то время как для других в адресе слова это его самый значимый байт.и наименее значимый - по следующему адресу ( big endian компьютеры).Многие компьютеры могут выбрать endianness во время загрузки.На самом деле, это вопрос соглашения (например, запись справа налево или слева направо), но это имеет глубокие последствия для программирования.Запись байта (char
в C) по адресу, который должен содержать 2 байта (short
в C), делает программы непереносимыми и настоятельно не рекомендуется, если вы действительно не знаете, что делаете.Если тип данных соблюдается должным образом, вам не нужно беспокоиться о том, как байты расположены в памяти.
Является ли размер гибким для использования этих неиспользуемых кусков пространства хранения?
Компьютеры выделяют пространство для переменных.В зависимости от типа переменной у вас зарезервировано определенное пространство.Например, в C char
хранится в байте, short
в двух байтах, int
в 4 байтах большую часть времени и т. Д. Это гарантирует, что любое значение получит эту переменную, если оно уважаетограничения его типа (например, unsigned char
должны быть между 0 и 255), он будет правильно записан в памяти.Так что это не «неиспользованное» пространство.Добавление «гибкости» сделает управление памятью полностью неработоспособным.