Re: Dlaczego 64 kB ?

Autor: Gregorio Kus (Grego_at_RMnet.IT)
Data: Wed 30 Oct 1996 - 03:22:01 MET


On Tue, 29 Oct 1996 13:36:25 +0100, Piotr Bernatowicz wrote:

>Dlaczego programy exe pisane np. w Turbo Pascalu 6.0
>moga miec jedynie do 64 kB objetosci?

tak bylo do wersj 3.
Potem weszly unit's, z ktorych kazda ma wlasny segment kodu
mogacy miec do 64kB.
Nawet i w v.3.0 mozna to bylo obejsc stosujac nakladki (overlays)

>Dlaczego ewentualne dane przetwarzane przez takie programy
>moga miec tez tylko 64 kB?

1 segment danych moze miec najwyzej 64kB,
czyli suma rozmiarow zmiennych globalnych danej unit
albo suma zmiennych lokalnych wszystkich "otwartych"
procedur (otwartych w sensie zagniezdzenia procedury
aktualnie wykonywanej) wraz z adresami powrotow
(segment stosu), lub "pojedyncza dana" na stercie (heap).

>I pytanie najwazniejsze. Jak obejsc to 64 kB
>ograniczenie dotyczace danych?

zwyczajnie: umiescic je na stercie, ktora moze miec rozmiary
teoretycznie dowolne,
tzn. teoretycznie 1MB,
tzn. teoretycznie 640kB, :-))))
to znaczy praktycznie
pamiec ktora Ci pokaze mem lub chkdsk
- pamiec zajeta przez kod programu
- pamiec zajeta stos.
^ to nalezy rozumiec jako minus

>Potrzebuje
>aby moj program przetwarzal dane o
>objetosci do 400 kB.

wystarczy nauczyc sie poslugiwac wskaznikami.
umiejetnosc niezbedna i wlasciwie dosc elementarna
dla programisty pracujacego w Pascalu czy w C.

Grego

P.S. Rada praktyczna: jesli do danych potrzebujesz miec
dostep typu random (nie sekwencyjny), umiesc w pamieci
"normalnej" tablice wskaznikow do wlasciwych danych
znajdujacych sie na stercie.

P.S.2. Na to aby odpowiedziec na pytanie "dlaczego"
(te ograniczenia 64kB) trzebaby sie zapedzic za bardzo
w architekture procesorow intel.
W ogromnym skrocie - kod wynikowy wyprodukowany
przez borlandowskie kompilatory pascala (przed Delphi)
pracuja w trybie 16to bitowym czyli nawet Pentium jest
tylko szybkim 8086. Zas 8086 ma architekture mieszana
20bit/16bit. 20 bitowe adresowanie daje 1MB, a 16to bitowe
64kB. Instrukcje operuja na adresach 16to bitowych
wiec adresuja w obszarze 64kB ktorego polozenie jest
wyznaczone przez rejestry segmentowe.

--
/-----------------------------------------------------------------
Gregorio Kus    Grego_at_RMnet.it                Grego_at_cyberspace.org
ROMA, Italy     http://www.RMnet.it/~grego    Grego_at_FreeNet.hut.fi
Anonymous Mail Service - http://free.rmnet.it/~grego/AnonMail.html


To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 12:35:36 MET DST