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