2017-08-31 17 views
-1

私は関数内で定数(文字列を含む大きな構造体定数)を宣言しており、この関数内でのみ使用されています。 プログラムに実行時間に影響はありますか? ' 関数は呼び出されるたびに作成されます(時間がかかります)。または、参照はその寿命を通して使用されます。 関数の外側で定数を宣言すると(グローバル)、実行が速くなりますか?定数の宣言とグローバルとの違いは何ですか?

+3

この質問をしてC++、C、Adaの質問にタグを付けるのは意味がありません。別の言語であり、答えは非常に異なります。 CまたはC++の文字列リテラル(実行時割り当てを必要としない)とC++の 'std :: string'(動的実行時割り当てを行う)をサポートします。だから、1つの言語のために投稿して、悪魔が細部に気づいているコードを見せてください。 –

答えて

1

実際、関数内で変数を宣言することは、優れた方法です。その変数がその関数の内部でのみ使用される場合。 2つのメソッドの間にはパフォーマンスの違いはありませんが、グローバルに定数を設定すると、よりクリエイティブな命名体系が必要になることがありますが、関数内の命名規則は汎用的です。結局のところ、その関数の内部でのみ使用されています。

1

名前空間を使用している限り、他の関連する関数が変数を使用する場合は、関数本体から直接移動します。

また、真の定数であれば、静的なconstexpr構造体を宣言することができます。つまり、関数が呼び出されるたびにスタックに割り当てられません(静的)。関数本体。また、コンパイル時に使用できる場所は、(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あなたが一度それを設定し、それを行うことができます。これは、データセグメントから来て、起動時に初期化されます。下に生と汚れたコードが、あなたにいくつかの直感を与えるでしょう。

#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

これはコンパイラに依存します。

"定数"はコンパイル時に静的ではないため、コンパイラは安全なことを行い、定数が宣言されるたびに初期化式を評価することがあります。

実際に問題がある場合は、コンパイラが行うことを測定します。

関連する問題