Титла: оперативна памет Публикувано от: Apache в Feb 06, 2006, 16:25 Здравейте. Имам един донякъде елементарен въпрос.
В момента чета за указателите в C и гледам следния фрагмент :
малко ми е трудно да опиша въпроса... До колкото знам оперативната памет е съставена от клетки. Големината на всяка клетка е равна на един байт. На моята машина променливите описани като integer заемат 4 байта. Но нещо не мога да схвана... тъй като паметта е съставена от клетки, и всеки обект на езика ( променлива, константа, масив, елемент на масив и т.н. ) си имат адрес, то в такъв случай ако в оперативната памет имаме 12 клетки, по един байт всяка, в които са вкарани три променливи от целочислен тип и приемем че адресите започват от 245, то адреса на първата ще е 245, на втората 249, а на третата 253. Прав ли съм ? Хехе, незнам кой до колко разбра въпроса ми, но като цяло ще се радвам ако някой ми разясни как стоят нещата около клетките и адресите....какво представляват... боже какви малоумни въпроси задавам. ![]() И все пак благодаря предварително. ![]() Титла: оперативна памет Публикувано от: ochinko в 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 в Feb 06, 2006, 22:56 Мерси за отговора.
![]() |