Nema veze, kompajler ce prepoznati koja je vrednost promenljivih posle izvrsavanja.. Cilj je iskoristiti instance promenljivih unutar loop-a, a ne koristiti njenu konacnu vrednost.
Evo napisite ovo u VB, pa cemo da vidimo krajnji rezultat (ovde petlja ne moze da se izbegne, iako svakako kompajler optimizira ovo, tako da se vrtimo u krug):
Code:
#include "windows.h"
struct LCVOR{
char inf;
int kljuc;
LCVOR *sledeci;
};
void umetni(LCVOR *novi,LCVOR **lista)
{
if(*lista==NULL){
novi->sledeci=NULL;
*lista=novi;}
else
umetni(novi,&(*lista)->sledeci);
}
void brisi_listu(LCVOR **lista){
if(*lista!=NULL){
brisi_listu(&(*lista)->sledeci);
delete *lista;
*lista=NULL;
}
}
LCVOR *lista;
void UciniNestoZaSvojuSavjest(int n){
LCVOR *tekuci = new LCVOR;
tekuci->inf = n;
umetni(tekuci, &lista);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
long count1 ,count2, count;
char* res = new char[256];
MessageBox(GetActiveWindow(),"Merenje pocinje","VCTest",MB_OK);
count1=GetTickCount(); //pocetak
long no = 0;
long lno = 0;
while( no<10000){
no++;
lno = 10000 - no;
UciniNestoZaSvojuSavjest(no);
}
count2 = GetTickCount(); //kraj
count=count2-count1;
wsprintf(res,"%lu",count);
char* txt = new char[256];
lstrcpy(txt,"Izvrsavanje je trajalo " );
lstrcat(txt,res);
lstrcat(txt," milisekundi");
MessageBox(GetActiveWindow(), txt ,"VCTest",MB_OK);
brisi_listu(&lista);
return 0;
}
Bez optimizacije: 4000+ ms
Sa optimizacijom: ~2000ms
"Don't you worry about wikipedia, we'll change it when we get home... We'll change a lot of things..."
Homer J. Simpson
Ovo mora u potpis:
"Portability is for people who cannot write new programs" Linus T.