Автор Тема: оперативна памет  (Прочетена 1195 пъти)

Apache

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
оперативна памет
« -: Feb 06, 2006, 16:25 »
Здравейте. Имам един донякъде елементарен въпрос.
В момента чета за указателите в C и гледам следния фрагмент :
Примерен код
int x, *px;
px = &x;
printf("%u\t%u", px, ++px);

малко ми е трудно да опиша въпроса...
До колкото знам оперативната памет е съставена от клетки. Големината на всяка клетка е равна на един байт.
На моята машина променливите описани като integer заемат 4 байта.
Но нещо не мога да схвана... тъй като паметта е съставена от клетки, и всеки обект на езика ( променлива, константа, масив, елемент на масив и т.н. ) си имат адрес,
то в такъв случай ако в оперативната памет имаме 12 клетки, по един байт всяка, в които са вкарани три променливи от целочислен тип и приемем че адресите започват от 245, то адреса на първата ще е 245, на втората 249, а на третата 253. Прав ли съм ?

Хехе, незнам кой до колко разбра въпроса ми, но като цяло ще се радвам ако някой ми разясни как стоят нещата около клетките и адресите....какво представляват... боже какви малоумни въпроси задавам.   '<img'>
И все пак благодаря предварително. '<img'>
Активен

ochinko

  • Напреднали
  • *****
  • Публикации: 125
    • Профил
оперативна памет
« Отговор #1 -: Feb 06, 2006, 17:07 »
Не съм сигурен, че ти разбирам въпроса, но ще се опитам да ти отговоря.

Ако паметта ти е 12 байта, то можеш да я си представиш като 12х1 или 3х4 клетки в зависимост от това дали променливата ти е 1-байтова или 4-байтова.

Ако номерираме байтовете от 0 до 11, можеш да четеш и пишеш байт на всеки от тези адреси, но целочислени променливи можеш да имаш само на адреси 0, 4 и 8.

Когато компилаторът види инкрементиране (или декрементиране) на указател, той събира или изважда брой байтове, кратен на големината на променливата (не на стойността де, а на размерността).

С други думи:

char *c = 0;
++c;
c сочи адрес 1

докато

int *i = 0;
++i;
i сочи адрес 4
Активен

Apache

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
оперативна памет
« Отговор #2 -: Feb 06, 2006, 22:56 »
Мерси за отговора. '<img'>
Активен