Article View: pl.comp.objects
Article #5091Re: Jaki rozmiar ma wska¼nik/pointer w C++?
From: Jakub K
Date: Wed, 10 Mar 1999 00:00
Date: Wed, 10 Mar 1999 00:00
74 lines
4262 bytes
4262 bytes
Jan Kowalski napisa�(a) w wiadomo�ci: <7c4ojf$9a$1...@sunflower.man.poznan.pl>... > >Sorki, kolego, ale na jakim swiecie Ty zyjesz ? Jeszcze epoka >16-bitowa ? >Rozmiary wska�nik�w zale�� przede wszystkim od systemu >operacyjnego. No... je�li kto� poza MS-DOSem nie zna �adnego >innego systemu operacyjnego, to niech b�dzie, ze od modelu >pami�ci A mo�esz mi pokaza� gdzie ja pisa�em co� o systemach operacyjnych ? > MS-DOS jest - jak wspomnia�em - jedynym 16-bitowym >systemem i modyfikatory wska�nik�w NEAR i FAR sa wymy�lone >wy��cznie dla niego (jest to swego rodzaju "rozszerzenie" j�zyka). Oczywi�cie �e j�zyka, a o czym my tu m�wimy ? Mo�e nie wiesz, ale to jest grupa o j�zyku C ! Zreszt� operatory far i near istniej� w wi�kszo�ci najpopularniejszych j�zyk�w programowania (C, C++, Pascal, Assembler ...). Zalet� tych j�zyk�w jest to, �e w du�ej mierze "odcinaj�" programist� od systemu operacyjnego. Mo�e ju� przegni�em filozofi� DOS'owsk�, ale wszyscy pisz�cy pod DOS i Windows'y 16-bitowe wcze�niej czy p�niej spotkaj� si� z 'far' i 'near' i zagadnieniem modeli pami�ci. >>�atwo wydedukowa� �e "blisko��" wska�nika (lub raczej >>tego na co on wskazuje) pozwala "zaoszcz�dzi�" dwa bajty. > >I to jest niestety wierutna bzdura. Wska�niki bliskie nie istniej� >dlatego, �eby cokolwiek oszcz�dza�. Pisz�c o oszcz�dzaniu cz�ci segmentowej mia�em na my�li OSZCZ�DZANIE cz�ci segmentowej. W okre�lonym modelu pami�ci (nie w ka�dym) zdefiniowanie 100 wska�nik�w typu 'near' zamiast 'far' pozwala zaoszcz�dzi� 200 bajt�w w segmencie danych. Oczywi�cie domy�lnym segmentem dla tych wska�nik�w jest potem zawarto�� rejestru DS. >....Istniej� dlatego, ze na >16-bitowych procesorach (czyli 8086, 80186, 80286) u�ywanie >wska�nik�w wi�kszych, ni� 16-bitowych by�o bardzo utrudnione. Cytuj�: "I to jest niestety wierutna bzdura". "Bardzo utrudnione" ?????? Na 286 operowanie na adresach 16-o bitowych to "chleb powszedni". Rozmiar wska�nika w sensie TECHNICZNYM zele�y w prostej linii od architektury procesora. W procesorach 16-o bitowych, aby zaadresowa� 1 MB pami�ci potrzeba by�o dw�ch rejestr�w 16-o bitowych (np ES:DX), gdzie pierwszy zawiera� cz�� semnentow�, a drugi offset'ow�. W tym celu przyj�o si� stosowa� notacj� Segment:Offset. Mo�esz to nazywa� archaizmem, ale tak si� przyj�o. Dla ludzi pisz�cych w "je�yku procesora" takie rzeczy s� tak jasne jak to, �e �wieci s�o�ce i tylko statystycznemu "Janowi Kowalskiemu" ;-) takie rzeczy trzeba t�umaczy�. >Okre�lenie "cze�� segmentowa" wska�nika istnia�o tylko na >tych trzech wymienionych przeze mnie procesorach >A pomija�o si� to nie w konkretnych zastosowaniach, lecz raczej w tych >konkretnych zastosowaniach si� jej NIE u�ywa�o. Uff... Ale be�kot Dzi� w Windows stosowane s� nadal wska�niki 32-u bitowe, cho� system obs�uguje pami�� rozszerzon�. W cz�ci segmentowej jest tzw. selektor. (m�wi Ci to co� ?) I na koniec uwaga: je�li pisz� o FAR i NEAR to nie po to, �eby si� powym�drza�, tylko po to, �eby pytaj�cego troch� ukierunkowa�. Nawet je�li te operatory nie maj� dzi� wi�kszego zastosowania. Dobrze jest wiedzie� dlaczego raz wystarcz� 2 bajty, a raz potrzeba czterech. Oczywi�cie prywatnie do przechowywania adres�w ka�dy mo�e u�y� tylu bit�w ile mu si� podoba i nazwa� to jak mu si� b�dzie chcia�o. J.K
Technical Details
Message-ID:
<36e6ae2e.0@news.vogel.pl>Path:
mbox-mo1.pugleaf.net!unknown!not-for-mailReferences:
<7c1lag$n2j$1@h1.uw.edu.pl> <36e5a9d4.0@news.vogel.pl> <7c4ojf$9a$1@sunflower.man.poznan.pl>Show Full Headers
Complete Article Headers
From: "Jakub K" <jk...@friko3.onet.pl> Subject: Re: Jaki rozmiar ma wska¼nik/pointer w C++? Date: 1999/03/10 Message-ID: <36e6ae2e.0@news.vogel.pl> X-Deja-AN: 453466869 References: <7c1lag$n2j$1@h1.uw.edu.pl> <36e5a9d4.0@news.vogel.pl> <7c4ojf$9a$1@sunflower.man.poznan.pl> X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3 X-Trace: 10 Mar 1999 18:38:54 +0100, ppp-144.lodz.tpnet.pl Newsgroups: pl.comp.lang.c,pl.comp.objects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit