2017-08-31 6 views
-1

Je déclare une constante (une constante de structure de grande taille contenant une chaîne) à l'intérieur d'une fonction et elle est utilisée uniquement dans cette fonction. aura-t-il un impact sur le temps d'exécution de mon programme? ' Ils seront créés chaque fois que la fonction est appelée (prendre plus de temps) ou seulement une fois et la référence sera utilisée tout au long de sa vie. Si je déclare la constante en dehors de la fonction (globale) sera-t-elle plus rapide en exécution?Quelle est la différence entre la déclaration constante Global ou la déclaration à l'intérieur d'une fonction où elle est utilisée?

+3

Cela n'a aucun sens de poser cette question et d'étiqueter la question avec C++, C et Ada - ce sont des langages différents et les réponses sont très différentes, par exemple. Littéraux de chaînes C ou C++ (qui ne nécessitent aucune allocation d'exécution) et C++ 'std :: string's (qui font l'allocation dynamique d'exécution). Alors, postez pour une langue et montrez-nous le code qui vous préoccupe en tant que diable dans les détails. –

Répondre

1

En fait, déclarer des variables à l'intérieur d'une fonction est une bonne pratique. Si cette variable doit seulement être utilisée à l'intérieur de cette fonction, bien sûr. Il n'y aura pas de différences de performances entre les deux méthodes, mais la création de la constante globale peut nécessiter un schéma de nommage plus créatif alors que celui de la fonction peut être générique. Il est seulement utilisé à l'intérieur de cette fonction, après tout.

1

Je le déplacerais personnellement hors du corps de la fonction si d'autres fonctions connexes utilisent la variable, tant que vous utilisez des espaces de noms. De plus, si c'est une vraie constante, je crois que vous pouvez déclarer une structure constexpr statique, ce qui signifie qu'elle ne sera pas allouée sur la pile chaque fois que la fonction est appelée (statique), même si vous la déclarez dans le corps de la fonction. Cela signifie également que là où il peut être utilisé au moment de la compilation, ce sera (constexpr).

#include <iostream> 

namespace Test{ 
struct Test { 
    char name[11]; 
    int a; 
    int b; 
}; 

static constexpr Test TEST_CONSTEXPR = { 
    "test value", 
    5, 
    6 
}; 
} 

int main() 
{ 
    std::cout << Test::TEST_CONSTEXPR.name << std::endl; 
    std::cin.get(); 
    return 0; 
} 
1

static struct peut vous aider à la mise en place une fois et faire avec elle. Cela proviendra du segment de données et initialisera lors du démarrage. Un code brut et sale ci-dessous, mais vous donnera une certaine intuition.

#include <stdio.h> 

struct A { 
    int a; 
    int b; 
}; 

void func(void) 
{ 
    static struct A a = {5,3}; 
    printf("FUNC: A.a: %d\n", a.a); 
} 

int main(int argc, char **argv) 
{ 
    static struct A a = {6,4}; 
    printf("MAIN: A.a: %d\n", a.a); 
    func(); 
    return 0; 
} 
1

Dans Ada, cela dépend du compilateur. (Comme les performances le sont généralement.)

Comme les "constantes" ne sont pas statiques au moment de la compilation, un compilateur peut faire la chose sûre et évaluer l'expression d'initialisation à chaque fois que la constante est déclarée.

Si cela compte vraiment, mesurez ce que votre compilateur fait.