2010-01-30 10 views
1

L'initialisation de variables de fonction locales prend le temps de traitement? par exemple:L'initialisation de variables de fonction locales prend le temps de traitement?

void foo (void) { 
    char *str = "hello"; 
    int num = 3; 
}

Ou, comme les variables globales, leur valeur est-elle déjà affectée dans la section en lecture seule du binaire? En d'autres termes: Est-ce que cela prend du temps d'invoquer une fonction qui a beaucoup de variables locales, en comparaison avec une fonction qui n'en a pas?

Edit: Je vois beaucoup de gens ici sont en colère parce qu'il semble que je suis en train d'optimiser mon code d'une manière très pointilleux/mauvais, qui ne devrait pas être pris en considération. Je suis conscient de cela. J'ai posé cette question seulement pour comprendre comment les choses se comportent et fonctionnent, pas pour des raisons d'optimisation. Je vous remercie. BTW, peut-être mes codes se trouve sur un MCU de faible puissance? Envisager d'autres options, PC n'est pas le seul.

+0

L'affectation d'une variable nécessite probablement entre 1 et 4 instructions. Sur un processeur 1 Ghz, cela ne va durer que 1-4 nanosecondes. – Pace

+2

Combien de variables locales allez-vous définir? 3 millions d'entre eux? Vous manquerez d'espace dans la pile avant de constater un retard considérable. Ne vous concentrez pas sur la micro-optimisation. – kennytm

+0

Je me fâche chaque fois que je vois des choses comme ça. Évidemment, cela prend du temps. Vous devez affecter une variable et définir tous les caractères dans une chaîne. il n'y a rien de quantitatif dans cette question. Apprenez à utiliser un profileur, c'est la seule façon de voir si vous devez vous préoccuper de ce genre de frais généraux et cela dépend de tout le programme spécifique. Que cherchiez-vous dans une réponse exactement? –

Répondre

3

Ce n'est pas beaucoup de temps, mais oui. ça prend du temps.

Dans cet exemple, le texte « bonjour » serait déjà quelque part vivre comme une valeur constante, mais str devrait être mis à pointer lors de l'exécution.

et la valeur 3 devrait être stocké dans num

+0

Où est ce "quelque part"? La section en lecture seule du binaire? – Dor

+0

@Dor: dans MSVC, il sera dans une section en lecture seule du binaire, je ne sais pas sur les autres compilateurs. –

+0

Compilez l'ensemble (par exemple, gcc -S) et voyez par vous-même. –

0

Si vous vous sentez aventureux, essayez dissasembling votre exécutable avec objdump avec et sans variables supplémentaires. Vous verrez qu'il y a des instructions supplémentaires insérées par le compilateur (soit en établissant un registre ou en faisant une opération de chargement) lorsque vous créez plus de variables locales dans votre fonction. Chaque instruction prend un temps différent de zéro ...