🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #5090

Re: Jaki rozmiar ma wskaźnik/pointer w C++?

#5090
From: Jan Kowalski
Date: Wed, 10 Mar 1999 03:26
53 lines
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-mail
References: <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