2010-06-10 9 views
0

Quelqu'un peut-il m'expliquer l'interaction exacte dans le contexte de retard entre les deux pour les boucles avec fonction d'horloge. Comment for1 interagit avec for2 sur l'instruction cout (30 sur 640000000)?Interaction entre les boucles pour la fonction d'horloge?

start=clock(); 
cout<<endl<<start<<endl; 
for(delay=0; delay<30; delay++) 
    for(i=0; i<640000000; i++); 

end=clock(); 
cout<<end<<endl; 
cout<<"Num of ticks for non reg-loop: "; 
cout<<end-start<<'\n'; 
+1

Pouvez-vous être plus clair sur exactement ce que vous cherchez? – VeeArr

+0

Je ne comprends pas comment boucle complète avec 30 * 640000000 itérations qui est impossible pour le compilateur 32 bits de traiter avec? – highlevelcoder

+0

Pourquoi est-ce impossible? .. – Blindy

Répondre

2

Probablement un optimiseur décent voir que la boucle est un non-op et l'optimiser complètement, donc il n'y aura presque pas de différence entre le début et la fin.

Si ce n'est pas optimisé, les deux boucles travaillent simplement sur le fait que 30 * 640000000 est plus grand que ce qui pourrait être stocké dans un entier de 32 bits. Il exécute la boucle 640000000 interne 30 fois pour tenter d'amplifier le retard.

EDIT: Ainsi, pour chaque 30 fois (en utilisant la variable delay), il crée une autre boucle (en utilisant i variable) à partir de 0. Il incrémente i 640000000 fois, chaque incrément, une faible fraction de temps (sinon optimisé loin). Ensuite, la boucle interne se termine, delay est augmenté de 1 et la boucle interne recommence à 0.

EDIT2: Si vous êtes juste essayer d'ajouter un retard, avez-vous envisagé d'utiliser sleep ou usleep ou la fonction Windows correspondante (s) plutôt que d'essayer de mettre en œuvre un sommeil par itération?

+0

En d'autres termes, comment le retard fonctionne-t-il réellement? – highlevelcoder

+0

demandez-vous comment fonctionne la boucle for? – daramarak

+0

Donc je suis incrémenté si vite à l'optimiseur? – highlevelcoder