Wskaźniki i zasada działania RAM

0

Zastanawiam się, czy w dobrym dziale umieściłem ten temat, bo jest z pogranicza hardware i programowania, ale bardziej chodzi tu o odniesienie się do sprzętu podczas programowania, więc wydaje mi się, że tak.

Nie wiem, czy ktoś się nad tym zastanawiał, ale zagadnienie pamięci RAM jest dla mnie czarną magią mimo iż czytałem o tym bardzo dużo. Czy jest ktoś w stanie odpowiedzieć mi na pytanie "jak to wszystko do cholery działa :)?".

Chodzi mi dokładnie o następujące zagadnienia:

  1. co decyduje o adresie komórki w RAM'ie jaki zostanie przydzielony zmiennej?
  2. skoro wskaźnik jest adresem pojedynczej komórki w pamięci RAM, to w jaki sposób zostaje zapisana tablica? (wiem, że wskaźnik wskazuje na miejsce zerowe tablicy, ale przecież tablica jest zbiorem zmiennych, które nie są adresowane)?
  3. czym tak na prawdę jest pamięć RAM, co to jest macierz komórek pamięci, w jaki sposób działa bufor I/O, w jaki sposób impuls elektryczny może przechowywać sygnały bitowe?
  4. jakiej wielkości jest pojedyncza komórka pamięci i czy jeżeli zmienna przekracza jej rozmiar, to zajmuje dwie lub więcej komórek?

Przyznam, że czytałem o tym bardzo dużo, ale nie udało mi się niczego konkretnego wywnioskować. Programuję już od jakiegoś czasu, a do tej pory tak naprawdę nie wiem co robię i w jaki sposób to działa.

Z góry dzięki za wszelką pomoc.


Świetny tutorial o wskaźnikach:
http://xion.org.pl/files/texts/mgt/html/1_8.html

Świetny artykuł o pamięci RAM:
http://nvision.pl/Wszystko-o-pamieciach-RAM--Articles-169-ndetails.html

0

Wskaznik na ram nie wskazuje, ale mniejsza o to:

http://www.microsoft.com/poland/technet/article/art0092_01.mspx

plus manuale INTELA i bedziesz wiedzial wszystko czego potrzebujesz ;)

0

1.Nie do końca jestem pewien, ale wydaje mi się że pierwsze wolne miejsce, które będzie mogło przechować tą zmienną, tzn będzie wystarczająco długie.
Jesli chciałbyś gdzieś zapisać 100 elementową tablice longów, program będzie szukał w pamięci miejsca o długości 100*4 bajty (4 bajty zajume long).
2. Tablica jest zapisana w pamieci ram jedna zmienna obok drugiej.
Tworząc tablice zmiennych np typu char( char zajmuje jeden bajt), są one po prostu zapisane w pamięci jedna obok drugiej. Zapytasz pewnie, że jeśli mamy wskaźnik na pierwszy element tablicy, i wykonamy wsk++, skąd wskaznik wie, o ile ma przeskoczyć ? ano stąd, że wiadomo że pokazuje na elementy typu char, więc będzie skakał o 1 bajt. Gdybyśmy zadekralowali tablice typu long, wskaznik skakałby co 4 bajty, bo tyle zajmuje własnie long.
3. każda komórka pamięci to rejestr o długości 1 bajta. Gdybyś postudiował trochę budowę układów cyfrowych poznałbyś jak działają proste układy(przerzutniki), które mogą przechowywać impulsy.
4.1 bajt. jesli przekroczy rozmiar to zajmuje wiecej komórek.

0
friko16 napisał(a)

1.Nie do końca jestem pewien, ale wydaje mi się że pierwsze wolne miejsce, które będzie mogło przechować tą zmienną, tzn będzie wystarczająco długie.
Jesli chciałbyś gdzieś zapisać 100 elementową tablice longów, program będzie szukał w pamięci miejsca o długości 100*4 bajty (4 bajty zajume long).
2. Tablica jest zapisana w pamieci ram jedna zmienna obok drugiej.
Tworząc tablice zmiennych np typu char( char zajmuje jeden bajt), są one po prostu zapisane w pamięci jedna obok drugiej. Zapytasz pewnie, że jeśli mamy wskaźnik na pierwszy element tablicy, i wykonamy wsk++, skąd wskaznik wie, o ile ma przeskoczyć ? ano stąd, że wiadomo że pokazuje na elementy typu char, więc będzie skakał o 1 bajt. Gdybyśmy zadekralowali tablice typu long, wskaznik skakałby co 4 bajty, bo tyle zajmuje własnie long.
3. każda komórka pamięci to rejestr o długości 1 bajta. Gdybyś postudiował trochę budowę układów cyfrowych poznałbyś jak działają proste układy(przerzutniki), które mogą przechowywać impulsy.
4.1 bajt. jesli przekroczy rozmiar to zajmuje wiecej komórek.

Co do pierwszego to od kiedy pointer wskazuje na ram ? Program bedzie szukal miejsca tez ciekawe, a jak ? O jakiej pamieci mowisz, stos, sterta, bss , other ?
2) Powiedz mi ile w pamieci zajmie tablica char tab[39] ?
3) Rejestr powiadasz o dlugosci jednego bajta ? To jaka to jest architektura ta o ktorej wspominasz ?
4) Bajt zajmuje wiecej komorek tez ciekawe....

0

http://www.microsoft.com/poland/technet/article/art0092_01.msp

Bardzo dobry artykuł, niestety na kilka godzin tęgiego rozkminiania, ale postaram się go przeczytać.

Gdybyś postudiował trochę budowę układów cyfrowych poznałbyś jak działają proste układy(przerzutniki), które mogą przechowywać impulsy.

... pewnie nie postudiuję, bo studia mam już za sobą, a czasu mało więc jak byś miał, lub ktokolwiek ochotę łopatologicznie przedstawić w skrócie to zagadnienie, tak "do prostego człowieka" :). Chciałbym mieć chociaż zarys tego procesu przechowywania informacji ...

Co do reszty, to wszystko wydaje się logicznie i fajnie opisane :)

0

Dobrze, ze tych ukladow co impulsy przechowuja nie przestudiujesz, bo na nic to by sie pewnie nie zdalo :D
Zacznijmy od zalozenia, ze mamy komputer z procesorem 32 bitowym, wiec tak.
Zamiast korzystac bezposrednio z ramu, procesy korzystaja z pamieci wirtualnej o rozmiarze 4GB, czyli 0xFFFFFFFF max, a 0x00000000 min. System decyduje co bedzie zamapowane do RAMU, a co nie. Pamiec wirtualna jest podzielona roznie.
Jesli nie ma trybu PAE i innych to gorne 2GB tej pamieci zajmuje kernel, a reszta pamieci jest dla nas.
Pamiec oprocz tego, ze masz podzielona na rozne segmenty typu stos, sterta(mechanizm segmentacji) to jeszcze jest pamiec podzielona na strony, kazda po 4kB. Do nie ktorych stron sie nie mozemy odwolac do innych mozemy, nie ktore mozemy czytac, wykonywac, zapisywac do nich, a do innych nie.
To taki drobny zarys pamieci :D Mnostwo czytania przed Toba, ale nie zrazaj sie do tego, bo jest to ciekawe ;)

0

No ... sądząc po złożoności przedstawionej tu problematyki, to jeszcze długa droga przede mną.
Teraz tylko wystarczy wolny weekend i pozytywne nastawienie psychiczne :).

Dzięki wszystkim za pomoc!

0
  1. czym tak na prawdę jest pamięć RAM, co to jest macierz komórek pamięci, w jaki sposób działa bufor I/O, w jaki sposób impuls elektryczny może przechowywać sygnały bitowe?

http://en.wikipedia.org/wiki/Dynamic_random_access_memory

1 użytkowników online, w tym zalogowanych: 0, gości: 1