Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.2.Struktury
Jakwidać,wjęzykuniskiegopoziomuimplementacjatakprostegoipodstawowegozagadnieniajakwieloargumentowe
funkcjeniekonieczniejestprosta.Przejdźmyterazdobardziejzłożonegoproblemu,amianowicieobsługistruktur.Należywtymmiejscu
powtórzyć:dlaprocesoracaładostępnapamięćwygląda„płasko”.Nierozumieon(czytaj:niepotrafiinterpretować)blokówkodujako
funkcjijakrównieżorganizowaniagrupkomórekpamięci(bajtów)wzłożonestruktury.
structst001{
intfirst;
charblob[200];
intx;
chary;
unsignedlongintz;
intlast;
};
Listing1.3.PrzykładowadefinicjastrukturywjęzykuCzawierającaelementyoróżnychtypach
Pamięćpotrzebnadoprzechowywaniastrukturymożebyćzarezerwowananadwasposoby:
1.poprzezdeklaracjęglobalnejlublokalnejzmiennejdanegotypu:
a.zmiennalokalnapamięćjestautomatycznierezerwowananastosiepodczasrozpoczęciablokufunkcji,
b.zmiennaglobalnapamięćrezerwowanajestpodczasinicjalizacjiprogramu;
2.poprzezbezpośredniąalokacjęmiejscanastrukturę(naprzykładfunkcjąmalloc).
Listingi1.4,1.5i1.6orazodpowiadająceimrysunki1.9,1.10i1.11przedstawiajązależnośćpomiędzylokalizacjąstrukturywpamięci
(wpamięciglobalnej,nastosieistercie)aodwołującymsiędonichkodemasemblera.
#include"stru.h"
structst001global;
voidfunc1(void){
global.x=0xbadf00d;
}
intmain(void){
func1();
return0;
}
Listing1.4.PrzykładowykodwjęzykuCodwołującysiędopolastrukturyumieszczonejwpamięcistatycznej
Rysunek1.9.Wpisaniestałejpododpowiedniadreswpamięcistatycznej
#include"stru.h"
voidfunc1(void){
structst001local;
local.x=0xbadf00d;
}
intmain(void){
func1();
return0;
}
Listing1.5.PrzykładowykodwjęzykuCodwołującysiędopolastrukturyumieszczonejwlokalnejramcestosu
Rysunek1.10.Alokacjastrukturywramcestosuiwpisaniestałejpododpowiednieprzesunięcie(ang.
offset
)
#include"stru.h"
#include<stdlib.h>
voidfunc1(void){
structst001*ptr_stru;
ptr_stru=(structst001*)malloc(sizeof(structst001));
ptr_stru->x=0xbadf00d;
}
intmain(void){func1();return0;}
Listing1.6.PrzykładowykodwjęzykuCalokującystrukturęnastercieiodwołującysiędojejelementu