Article View: pl.comp.objects
Article #5090Re: Jaki rozmiar ma wskaźnik/pointer w C++?
From: Jan Kowalski
Date: Wed, 10 Mar 1999 03:26
Date: Wed, 10 Mar 1999 03:26
53 lines
3144 bytes
3144 bytes
Dawno nie czytalem takich smiesznot, jakie
Jakub K napisał w wiadomości: <36e5a9d4.0@news.vogel.pl>...
>Rozmiary wskaźników nie zależą od języka (C/C++), ani
>od kompilatora, tylko od modelu pamięci.
>Ja dodam jeszcze tylko, że wskaźniki 2 bajtowe nazywają się
>NEAR (bliskie), a 4 bajtowe - FAR (dalekie).
Sorki, kolego, ale na jakim swiecie Ty zyjesz ? Jeszcze epoka
16-bitowa ?
Rozmiary wskaznikow zaleza przede wszystkim od systemu
operacyjnego. No... jesli ktos poza MS-DOSem nie zna zadnego
innego systemu operacyjnego, to niech bedzie, ze od modelu
pamieci. MS-DOS jest - jak wspomnialem - jedynym 16-bitowym
systemem i modyfikatory wskaznikow NEAR i FAR sa wymyslone
wylacznie dla niego (jest to swego rodzaju "rozszerzenie" jezyka).
>Łatwo wydedukować że "bliskość" wskaźnika (lub raczej
>tego na co on wskazuje) pozwala "zaoszczędzić" dwa bajty.
I to jest niestety wierutna bzdura. Wskazniki bliskie nie istnieja
dlatego, zeby cokolwiek oszczedzac. Istnieja dlatego, ze na
16-bitowych procesorach (czyli 8086, 80186, 80286) uzywanie
wskaznikow wiekszych, niz 16-bitowych bylo bardzo utrudnione.
Wlasnie o tym wspomnialem.
>Jest to celowe w mniejszych modelach pamięci, gdzie
>w konkretnych zastosowaniach można pominąć część
>"segmentową" wskaźnika.
Okreslenie "czesc segmentowa" wskaznika istnialo tylko na
tych trzech wymienionych przeze mnie procesorach. A pomijalo
sie to nie w konkretnych zastosowaniach, lecz raczej w tych
konkretnych zastosowaniach sie jej NIE uzywalo. A nie jest
to takie proste. Wyobraz sobie np., ze chcesz wczytac do
pamieci 128k danych... i co ? Skoro segment siega Ci
gora na najblizsze 64k ? A jak juz wczytasz, to w jaki
sposob bedziesz siegal co chwila po dane to z jedej to
z drugiej polowki ? Przeciez nie inaczej jak w tym stylu:
ES = segment( &dane[i] );
BP = offset( &dane[i] );
a = *(ES:BP);
Jesli dane mieszcza sie na jednym segmencie, to tylko robisz
na poczatku
DS = segment( &pierwsza_zmienna );
i normalnie siegasz po dane krotkim wskaznikiem.
Jesli nie...
Pozdrawiam,
Jan Kowalski, szary uzytkownik
Technical Details
Message-ID:
<7c4ojf$9a$1@sunflower.man.poznan.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!news.wnaft.agh.edu.pl!news.memax.krakow.pl!news.astercity.net!news.icm.edu.pl!news.man.poznan.pl!not-for-mailReferences:
<7c1lag$n2j$1@h1.uw.edu.pl> <36e5a9d4.0@news.vogel.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!news.wnaft.agh.edu.pl!news.memax.krakow.pl!news.astercity.net!news.icm.edu.pl!news.man.poznan.pl!not-for-mail From: "Jan Kowalski" <jkowalski@microsoft.com> Newsgroups: pl.comp.lang.c,pl.comp.objects Subject: Re: Jaki rozmiar ma wskaźnik/pointer w C++? Date: Wed, 10 Mar 1999 04:26:03 +0100 Organization: Poznan Supercomputing & Networking Center Lines: 55 Message-ID: <7c4ojf$9a$1@sunflower.man.poznan.pl> References: <7c1lag$n2j$1@h1.uw.edu.pl> <36e5a9d4.0@news.vogel.pl> NNTP-Posting-Host: 150.254.24.12 X-Trace: sunflower.man.poznan.pl 921036207 298 150.254.24.12 (10 Mar 1999 03:23:27 GMT) X-Complaints-To: tomjab@man.poznan.pl NNTP-Posting-Date: 10 Mar 1999 03:23:27 GMT X-Newsreader: Microsoft Outlook Express 4.72.2106.4 X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit