[ ZaMpA @ 18.11.2006. 16:25 ] @
Kako operacije trose memoriju? Koje zahtevaju najmanje a koje najvishe prostora?
Npr. INC(i) je manje zahtevna od i:=i+1 jer se u drugoj verziji uzima vrednost od i pa se onda radi dodela, dok se kod INC(i) samo poveca i za jedan. E, meni treba neka lista tipa "sabiranje trosi 2 bajta, dodela trosi 8 bajtova" itd...
[ DjoleReject @ 24.11.2006. 15:30 ] @
Bitno je o kom programskom jeziku govoris, kao i o kom procesoru (ako govorimo o asembleru). Visi programski jezici ne garantuju koliko i koje registre koriste. Tako da u tom slucaju moras pitati proizvodjaca kompajlera.
[ boki @ 02.02.2007. 01:50 ] @
Mislis na footprint ili procesorsko vreme ?
Uzimanje vrednosti pa radjenje dodele.. to su delovi instrukcije, ne vidim kakve veze imaju sa footprintom tog nekog inta u memoriji.
[ NrmMyth @ 02.02.2007. 20:12 ] @
Bitno je da znas da ti ta razlika nece ni malo utjecati na brzinu cijelokupnog programa.
Jos ce ti i kompajler to prevesti sve u jednak kod.
[ X Files @ 04.02.2007. 16:29 ] @
Citat:

Npr. INC(i) je manje zahtevna od i:=i+1 jer se u drugoj verziji uzima vrednost od i pa se onda radi dodela,
dok se kod INC(i) samo poveca i za jedan.

Ovo je rečeno vrlo proizvoljno, zapravo vešto je izbegnuta analiza kako "se kod INC(i) samo poveca i za jedan".

Gornja tvrdnja je bila tačna pre X godina, kada kompajleri nisu imali nikake naročite optimizacije. Danas, svaki
kompajler ide na optimizaciju, pa je za očekivati da će gornji izrazi biti identično prevedeni.

Dalje, ako bi kompajler i imao optimizaciju, ništa mu to ne bi vredelo ako mašinski kod na koji se prevodi ne bi
imao u sebi ugrađene operatore brzog inkrementira ++ i --.

Prvi mašinski jezik u kome sam naišao na ove operatore je bio MC68000 (Amiga 500). Nekako, u to vreme
je i bila ekspanzija programskog jezika C, pa mi je postalo 'jasno' otkud ideja za izraze tipa: i++ i ++i

U Pascal-u, se to rešava sa INC(i) što ne govori "lepo" o čemu se radi.

Ako je INC(i) obična funkcija (što nekom C programeru može pasti na pamet), onda će trošiti više nego
i:=i+1, jer bi se radilo o pozivu, stavljanju na stek registara, izvršavanja koda, vraćanja registara sa steka itd.

[ cynique @ 09.02.2007. 10:22 ] @
Kolika je duljina enkodirane instrukcije procesora (u bajtovima) je općenito varijabilno ovisno o korištenoj arhitekturi i modelu. Većina modernih CISC-eva ima instrukcije varijabilne duljine, pri čemu su na x86 prisutne gomile caka - npr. neke elementarne aritmetičke operacije koje koriste eax registar su obično za bajt kraće od onih koje barataju sa ostalim registrima opće namjene. Štoviše, moguće je u nekim slučajevima i više od jednog načina enkodiranja jedne te iste instrukcije.

Najlakše je programski ostvariti dohvat duljine instrukcije koristeći tzv. LDE (Length Disassembler Engine), koji funkcioniraju kao mali konačni automati u stilu duljina_ins = f(&mem). Možeš ih lako izguglati nekoliko, a ako se ne varam prije oko godinu dana je na C podforumu deroko (aka Vojislav M.) ostavio i jedan svoj (sam ga nađi).