Kezdőoldal » Számítástechnika » Programozás » Van valami olvasmány amit...

Van valami olvasmány amit elolvashatnék, hogy jobban megértsem a pointerek működését C-ben?

Figyelt kérdés

okt. 30. 09:34
1 2 3 4 5
 41/47 T. Feri ***** válasza:
100%
Valójában a processzorok architektúráját említettem, de kétség kívül félreérthető voltam. Bár a mikrovezérlők között van, amelyik memória tartománya 8 bittel is címezhető. (Nem néztem utána a címzésmódjainak.) [link]
dec. 23. 13:07
Hasznos számodra ez a válasz?
 42/47 anonim ***** válasza:
8%

" Bár a mikrovezérlők között van, amelyik memória tartománya 8 bittel is címezhető."


Már megint "félreérthető" lettél. :)


A mikrovezérlők között akad olyan is, amelynek a memória címterülete akár 6 bittel is lefedhető (ez mindössze 64 bájt (8 bites szervezés esetében)), de ehhez tudni illik, hogy az ilyen eszközök nem Neumann, hanem Harvard architektúrás cuccok, ahol is ebben a falatnyi (adat)-memóriában mindössze a változók értékei tárolódnak, mert a program-memória elkülönülve az operatív tártól, azért ott kuporog a háttérben.


A Neumann architektúra jellemzője, hogy egy közös memóriában van az adat és a program. Ilyen az IBM (kompatibilis) PC is.

A Harvard architektúra ezt a kettőt elszeparálja. Ennek köszönhető, hogy létezik kontroller 512, 256, 128 vagy akár 64 bájt operatív memóriával. De ezek az eszközök bírnak emellett a kis méretű operatív memória mellett még több kilobájt program-memóriával (flash) is, amibe a futtatandó programot beleégetik.

dec. 23. 13:41
Hasznos számodra ez a válasz?
 43/47 T. Feri ***** válasza:
100%
Ez így igaz, ahogy leírtad. De ha már itt tartunk, akkor említsük meg, hogy a legelterjedtebb intel (amd) pentium processzoroknak is van olyan (védett) üzemmódja, amelyben a különböző szegmensek eltérő memória hivatkozásokat jelentenek azonos címekre vonatkozóan. Négy szegmens regiszter van (program, stack, source, destination), amelyek bizonyos utasításoknál automatikusan használódnak, de prefixekkel ezeket módosítani lehet. De ezt a tulajdonságot emlékeim szerint csak az OS-2 operációs rendszer használta ki. Minden más operációs rendszer flat módban fut, amelyben minden szegmensnek ugyanaz az állandó értéke van. De igazi jelentőségük még a 16 bites intel XP processzorok korában volt, amikor is az egyben címezhető tartomány 64 KByte volt, viszont a négy szegmensregiszterrel 258 KByte vált átcímezhetővé. Persze korlátozásokkal, hiszen a program, és a stack is 64 KByte lehetett maximum.
dec. 23. 14:09
Hasznos számodra ez a válasz?
 44/47 T. Feri ***** válasza:
91%
Bocs, nem 4, hanem 5 szegmens regiszter van. A data szegmenst kifelejtettem. Így elvben 5*64 KByte volt címezhető, nem Naumann architektúrával. De nyilván kilógnak ebből az architektúrából a regiszterek is, amelyekből számos akad.
dec. 23. 14:15
Hasznos számodra ez a válasz?
 45/47 anonim ***** válasza:
83%
Kis Sügérke (0%-os). Mi köze a C pointereknek ahhoz, hogy Neumann vagy Harvard architektúrás a processzor? Miért keversz bele megint olyan dolgot aminek köze nincs a kérdéshez. (a szokásos felesleges okoskodáson kívül).
dec. 23. 17:04
Hasznos számodra ez a válasz?
 46/47 anonim ***** válasza:
8%
Azért, hogy neked jobban fájjon, látván, mennyi sok mindenhez vagy még hülye.
dec. 23. 17:09
Hasznos számodra ez a válasz?
 47/47 T. Feri ***** válasza:
A C, C++, C# nyelvek magas szintű nyelvek, amelyekben lehetőleg úgy kell megírni egy programot, hogy az bármely olyan gépen lefusson, amelyre megírták a fordító programot. A mutató típus viszont processzor, és operációs rendszer függő, így a nyelvnek egy olyan része, amely nem ugyanolyan minden gépen. Egy 'a' nevű változó memória címét megkaphatjuk egy &a hivatkozással, de azt ne kezeljük másként, mit pointer-t. Magas szintű nyelvben érdektelen, hogy az mekkora, de lehet akár 64-bites is, vagy lehet sokkal kisebb. Bár van rá sok rossz példa, de kerüljük el, hogy egy pointer egy olyan struktúra része legyen, amelyet háttértárolóra mentünk, és emiatt esetleg egy másik rendszerből próbáljuk később beolvasni, és értelmezni. Olyanból, amelyben másmilyen egy pointer típusa. Tipikusan pc-n le lehet fordítani egy programot 32 bitesen, vagy 64 bitesen is ugyanarra a gépre, de az ilyen struktúrák nehézségeket fognak okozni. Ugyanez a kompatibilitási probléma persze nem csak pointereknél jelentkezik. A std::size_t típusnál is előjön, más a mérete 32 bites, és 64-bites fordításnál. A wchar_t típus viszont a windows (utf-16), és linux (utf-32) rendszereknél különbözik. Így az így elmentett unicode szövegek nem átvihetők a két rendszer között. Erre használjuk az utf-8 kódolást. Ilyen szövegeknél problémás még a java nyelv, amely csak az utf-16 kódot használja, bármely operációs rendszerben.
dec. 23. 18:53
Hasznos számodra ez a válasz?
1 2 3 4 5

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!