🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #5110

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

#5110
From: Jan Kowalski
Date: Wed, 10 Mar 1999 02:59
51 lines
3656 bytes
Piotr Piatkowski napisał(a) w wiadomości:
<7c3qeg$h2e$2@druid.ceti.com.pl>...
>Hmm... Znowu ktoś może powiedzieć że to dyskusja akademicka, ale właśnie
>z tego nieszczęsnego DOS'u wzięło się coś takiego jak dodatkowe
>oznaczenie typu wskaźnika jako far.
>
>Od dawna nie mam do czynienia z kompilatorami DOS/Windows, ale np. teraz
>mam bibliotekę ODBC pod Linuxem, a że ODBC jest produktem MS to w
definicjach
>typów pojawiają się właśnie wskaźnik np. UCHAR FAR* (jak przypuszczam
gdzieś
>wcześniej FAR jest zdefiniowane jako nic).
>
>A wracając do meritum :-) to przynajmniej w tych starych kompilatorach
>obok far było też near. I tam można było mieć w tym samym programie
>wskaźniki typu np. char far* i char near*, które były odpowiednio 4 i 2
>bajtowe. Mam nadzieję że to już historia?


Jak najbardziej. Jest to zwiazane raczej nie tyle z DOS-em, co jego
traktowaniem procesorow - przeciez jest on z czasow XT, a wiec 8086.
A to byl procesor, ktory NIE UMIAL operowac na 32-bitowych adresach.
Dlatego wlasnie byly wskazniki bliskie (w tym samym segmencie, ktorego
numer widnieje w segmencie danych), oraz dalekie (na cala przestrzen
adresowa, ale trudniejszy w implementacji). Przygladajac sie, jak w tym
temacie stal taki np. MC68000, zakrawalo to na smiesznosc - procesor
nie dosc, ze wolniejszy, to jeszcze nie potrafi wykorzystac efektywnie
przestrzeni adresowej powyzej 64k, w przeciwienstwie wlasnie do motorolki,
ktora mogla zaadresowac 16MB pamieci bez kozery.

Od czasow 386 sytuacja sie zmienila, niestety Borland C++ 3.1 (np.) jest
kompilatorem 16-bitowym, w zwiazku z czym do 32-bitowych systemow
nadaje sie conajmniej srednio. Na 32-bitowych systemach bez problemu
adresuje sie przestrzen do 4GB pamieci i nie potrzebuje sie na to zadnych
kombinacji z rejestrami segmentowymi. A zeby bylo smieszniej, to te
odziedziczone rejestry sementowe sa bardzo pozyteczne, w koncu teraz
tez, jak zawsze, program dzieli sie na trzy segmenty - kod, dane i stos.
Oczywiscie nie jest jednak powiedziane, ze w segmencie kodu nie moze
byc danych (patrz: SIGSEGV przy zapisie do const char*)...

Modyfikatory NEAR i FAR powinny byly zniknac wraz z pojawieniem sie
32-bitowych systemow (nawiasem mowiac, MS-DOS jest JEDYNYM
16-bitowym systemem), niestety rozwinely sie dostatecznie dopiero,
gdy pojawil sie pentium, a i tak jest jeszcze tego duzo. I programy
i narzedzia, jak wlasnie Borland C++ 3.1, ktory nie potrafi wprost
zaadresowac
pamieci powyzej 64k bez segmentu, mimo, ze procesor ma taka mozliwosc.

    Pozdrowienia,
        Jan Kowalski, szary uzytkownik
Technical Details
Message-ID: <7c4n1m$h78$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: <Pine.GSO.4.10.9903091052470.26753-100000@student.uci.agh.edu.pl> <7c3qeg$h2e$2@druid.ceti.com.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.objects
Subject: Re: Jaki rozmiar ma wskaźnik/pointer w C++?
Date: Wed, 10 Mar 1999 03:59:30 +0100
Organization: Poznan Supercomputing & Networking Center
Lines: 53
Message-ID: <7c4n1m$h78$1@sunflower.man.poznan.pl>
References: <Pine.GSO.4.10.9903091052470.26753-100000@student.uci.agh.edu.pl> <7c3qeg$h2e$2@druid.ceti.com.pl>
NNTP-Posting-Host: 150.254.24.12
X-Trace: sunflower.man.poznan.pl 921034614 17640 150.254.24.12 (10 Mar 1999 02:56:54 GMT)
X-Complaints-To: tomjab@man.poznan.pl
NNTP-Posting-Date: 10 Mar 1999 02:56:54 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