Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
30
ROZDZIAŁ1.WPROWADZENIE
lll
inti;
lll
voidf(lll){
inti;
lll
i=3;
lll
}
lll
x=i+1;
/*globalneź
*/
/*lokalneź
*/
/*użycielokalnegoź*/
/*użycieglobalnegoź*/
RYSUNEK
109:Dwiedeklaracjenazwyź
1.
Statycznealbodynamicznewiązanienazwzlokalizacjami.Większość
wiązańnazwzlokalizacjamijestdynamicznychibędziemyomawiaćkilka
podejśćdotegozagadnieniawdalszejczęścipodrozdziału.Jednakniektóre
deklaracje,takiejakglobalne
ź
narysunku1.9,mogąotrzymaćlokalizację
wpamięcitylkoraznazawsze,gdykompilatorbędziegenerowałkod
wynikowy2.
2.
Statycznealbodynamicznewiązanielokalizacjizwartościami.Wiąza-
nielokalizacjizwartościami(drugafazanarysunku1.8)równieżjest
wogólnościdynamiczne,ponieważniemożemyprzewidziećwartości,która
będzieumieszczonawtejlokalizacji,dopókinieuruchomimyprogramu.
Wyjątkiemzadeklarowanestałe.NaprzykładdefinicjawjęzykuC
#defineARRAYSIZE1000
statyczniewiążenazwę
ARRAYSIZE
zwartością1000.Możemyustalićto
powiązanie,przyglądającsięwyrażeniu,iwiemy,żeniejestmożliwe,
abywiązanietozmieniłosiępodczaswykonywaniaprogramu.
1.G.3.Statycznyzasięgistrukturablokowa
Większośćjęzyków,wtymCijegorodzina,używazasięgustatycznego.Re-
gułyzasięguwjęzykuCbazująnastrukturzeprogramu;zasięgdeklaracjijest
determinowanyniejawnieprzezmiejsce,wktórymdeklaracjapojawiasięwpro-
gramie.Późniejszejęzyki,takiejakC++,JavaiC#,dodatkowoudostępniają
2
ZtechnicznegopunktuwidzeniakompilatorCprzypiszelokalizacjęwpamięciwirtualnej
dlaglobalnejzmiennej
i
,pozostawiającprzypisanieokreślonegomiejscawpamięcifizycznej
maszynyprogramowiładującemuisystemowioperacyjnemu.Jednakniemusimymartwić
sięoproblemy„relokacji”,gdyżtakoweniemajążadnegowpływunakompilację.Zamiast
tegotraktujemyprzestrzeńadresową,którejkompilatorużywadlaswojegokoduwynikowego,
takjakbybyłytolokalizacjewpamięcifizycznej.