Можете ли вы помочь мне понять указатели и адреса? - PullRequest
0 голосов
/ 26 марта 2011

Сколько байтов я могу хранить в одном адресе ОЗУ?

А каков размер одного указателя?

Я просто не уверен насчет этих базовых понятий и мне нужно немногоПомогите.Спасибо всем.

Ответы [ 2 ]

2 голосов
/ 26 марта 2011

Обычно вы можете хранить один байт на ячейку памяти.(Старые машины могли использовать не-октетные размеры слов , и эти машины могли хранить один клев или 12 или 24 бита на ячейку памяти.) Но в наши дни 8-битные - это одинбайт, а один байт - это одна ячейка памяти, хотя это может не соответствовать размеру слова машины.

Размер указателя может варьироваться: на 32-разрядных платформах указатели обычно составляют 4 байта.На 64-битных платформах указатели обычно имеют размер 8 байт. Старые платформы имели разные размеры указателей , чтобы позволить программистам более точно оптимизировать требования к памяти своих программ.(Я рад, что эти дни прошли.)

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

char *c;
int *i;

При использовании смещения или увеличения указателей (c+1 или i+1) компилятор добавит 1 для указателя char * и 4 или 8для указателя int *.Мой ассемблер не предоставил таких тонкостей, и мне потребовались месяцы, чтобы понять, что "компилятор C знает размеры типов, просто доверься ему".

1 голос
/ 26 марта 2011

Указатель обычно имеет 4 байта в 32-битных системах и 8 байтов в 64-битных системах, но это не является фиксированным и может зависеть от системы.

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

...