Сколько байтов я могу хранить в одном адресе ОЗУ?
А каков размер одного указателя?
Я просто не уверен в этих основных концепциях, и мне нужна небольшая помощь. Спасибо вам всем.
Сколько байтов я могу хранить в одном адресе ОЗУ?
А каков размер одного указателя?
Я просто не уверен в этих основных концепциях, и мне нужна небольшая помощь. Спасибо вам всем.
Обычно вы можете хранить один байт на ячейку памяти. (Старые машины могли использовать неоктетные размеры слова, и эти машины могли хранить один полубайт или 12 или 24 бита на ячейку памяти.) Но в наши дни 8 бит - это один байт, и один байт - это одна ячейка памяти, хотя это может быть не размер слова машины.
Размер указателя может быть разным: на 32-битных платформах указатели обычно имеют размер 4 байта. На 64-битных платформах указатели обычно составляют 8 байтов. Старые платформы имели разные размеры указателей, чтобы программисты могли более тщательно оптимизировать требования к памяти их программ. (Я рад, что те времена прошли.)
Что меня бесконечно смутило при первом запуске C, так это то, что ячейка памяти, на которую указывает указатель, увеличивает различные значения в зависимости от типа данных указателя.
char *c;
int *i;
При использовании смещения или увеличения указателей (c+1
или i+1
) компилятор добавит 1
для указателя char *
и 4
или 8
для указателя int *
. В моем ассемблере таких тонкостей не было, и мне потребовались месяцы, чтобы понять, что «компилятор C знает размеры типов, просто доверяйте ему».
Указатель обычно имеет 4 байта в 32-битных системах и 8 байтов в 64-битных системах, но это не фиксировано и может зависеть от системы.
Адрес - это просто позиция в вашей памяти, и указатель относится к ней. Но данные могут быть более одного байта - указатель просто показывает, где находится первый байт.