16.05.2015 Views

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ale najmniej pojemny. Model Huge - odwrotnie - najpojemniejszy,<br />

za to najwolniejszy. Model Tiny powoduje ustawienia wszystkich<br />

rejestrów segmentowych mikroprocesora na tę samą wartość<br />

(początek tej samej stronicy pamięci) i umieszczenie wszystkich<br />

zasobów programu wewnątrz wspólnego obszaru pamięci o wielkości<br />

nie przekraczającej 64 KB. Wszystkie skoki są wtedy "krótkie", a<br />

wszystkie pointery (adresy) 16-bitowe. Kompilacja z<br />

zastosowaniem modelu Tiny pozwala uzyskać program wykonywalny w<br />

wersji *.COM (a nie *.EXE). Ale niestety nie wszystkie programy<br />

mieszczą się w 64 KB. W modelu Small segment kodu jest jeden<br />

(kod max. 64 K) i segment danych też tylko jeden (dane max. 64<br />

K), ale są to już dwa różne segmenty. Zestawienia<br />

najważniejszych parametrów poszczególnych modeli pamięci<br />

przedstawia tabelka poniżej:<br />

Modele pamięci komputera IBM PC.<br />

________________________________________________________________<br />

Model Segment kodu Segment danych *dp *cp<br />

________________________________________________________________<br />

Tiny 1 1 (CS = DS) 16 bit 16 bit<br />

Small 1 1 16 bit 16 bit<br />

Medium wiele 1 16 bit 32 bit<br />

Compact 1 wiele 32 bit 16 bit<br />

Large wiele wiele 32 bit 32 bit<br />

Huge wiele wiele 32 bit 32 bit<br />

________________________________________________________________<br />

*dp - data pointer - wskaźnik do danych (near/far)<br />

*cp - code pointer - wskaźnik do kodu.<br />

Large - kod + dane = max. 1 MB.<br />

Huge - kod = max. 1 MB, wiele segmentów danych po 64 K każdy.<br />

Wynikające z takich modeli pamięci kwalifikatory near, far, huge<br />

dotyczące pointerów w <strong>C++</strong> nie są akceptowane przez standard ANSI<br />

C (ponieważ odnoszą się tylko do IBM PC i nie mają charakteru<br />

uniwersalnego). Trzeba tu zaznaczyć, że typ wskaźnika jest przez<br />

kompilator przyjmowany domyślnie (automatycznie) zgodnie z<br />

wybranym do kompilacji modelem pamięci. Jeśli poruszamy się<br />

wewnątrz niewielkiego obszaru pamięci, możesz "forsować" bliższy<br />

typ pointera, przyspieszając tym samym działanie programów:<br />

huge *p;<br />

...<br />

near *ptr;<br />

...<br />

near int Funkcja(...)<br />

{<br />

...<br />

//Bliski pointer<br />

//Bliska funkcja<br />

- 352-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!