Память и доступ к памяти внутри памяти?

57
4

Если я храню данные в char для ex:

char a = 'a'; 

то он будет храниться в 1 байт памяти и в соответствии с моей памятью доступа к компьютеру знаний в несколько раз, в случае, если мы используем структуру, он будет выполнять прокладку структуры, но в нормальном случае, как будут обрабатываться данные, например: здесь, если char a будет сохранен в местоположении 1000, тогда следующий байт останется неиспользованным или что? потому что компьютер не может получить доступ к 1001 (не в нескольких из 2), пожалуйста, уточните сомнение.

спросил(а) 2017-07-28T12:12:00+03:00 3 года, 2 месяца назад
1
Решение
116

Язык C не говорит о том, как переменные должны храниться в памяти. Это зависит от конкретного компилятора, используя его знание системы, на которую она нацеливается.

Некоторые процессоры могут считывать из любого байта в памяти, например, 8088 в исходном ПК имеет 8-битную шину данных, поэтому в любом случае ему придется читать и писать по одному байту. Преемники процессоров x86 все еще могут это сделать.

Итак, если вы храните свой

char a = 'a'; 

при адресе 1000, некоторые другие char могут быть сохранены по адресу 1001 (или 999, если компилятор предпочитает это).

Переменные, которые больше, чем char, например int или double, часто выделяются по адресу, даже делящемуся по их размеру. Это может увеличить время загрузки или использование кеша. На некоторых процессорах это даже требуется, но не на всех.

Подобно заполнению структур, которые вы упомянули, это может быть преимуществом для выравнивания переменных, не сохраненных в структурах аналогичным образом. Но это все зависит от компилятора.

И некоторые краткосрочные значения могут даже содержаться в регистре CPU и никогда не сохраняться в памяти вообще.

ответил(а) 2017-07-28T13:58:00+03:00 3 года, 2 месяца назад
41

Он двоичный, а не "кратный 2".

Адрес 1000 в памяти будет двоичным (32 бит) = 00000000 00000000 00000011 11101000

Адрес 1001 в памяти будет двоичным (32 бит) = 00000000 00000000 00000011 11101001


Кроме того, я считаю ошибкой рассматривать адресную память в десятичной системе.

Здесь определение адресации из Википедии:

адресация

Чтобы быть полезными, ячейки памяти должны быть читаемыми и записываемыми. Внутри устройства ОЗУ схема мультиплексирования и демультиплексирования используется для выбора ячеек памяти. Как правило, ОЗУ имеет набор адресных строк A0... An и для каждой комбинации битов, которые могут быть применены к этим линиям, активируется набор ячеек памяти. Из-за этой адресации операционные запоминающие устройства практически всегда имеют емкость памяти, равную двум.

Обычно несколько ячеек памяти имеют один и тот же адрес. Например, 4-битная "широкая" чип RAM имеет 4 ячейки памяти для каждого адреса. Часто ширина памяти и микропроцессора различна, для 32-разрядного микропроцессора потребуется восемь 4-битных чипов RAM.

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

ответил(а) 2017-07-28T12:28:00+03:00 3 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема