2017-06-10 5 views
2

foo::f()よりクラスメソッドの変数は、クラス自体に格納する方が速いですか?

class foo { 
public: 
    void f() { 
    char buffer[1024]; 
    memset(buffer, NULL, 1024); 
    read_some_input_to_buffer(buffer, 1024); 
    } 
}; 

class bar { 
public: 
    void f() { 
    memset(_myPrivateBuffer, NULL, 1024); 
    read_some_input_to_buffer(_myPrivateBuffer, 1024); 
    } 

private: 
    char _myPrivateBuffer[1024]; 
}; 

ウィルbar::f()仕事より速く、コードの次の部分を考えてみましょうか?私が見ているように、バッファは既にbarに存在しているので、コンパイラはその関数が呼び出されたときにスタック上にメモリを割り当てません。あるいは、私は間違っていて、メモリは既に割り当てられている前にfoo::f()と呼ばれていますか?

+2

スタックにメモリを割り当てるには時間がかかりません。 – Barmar

+1

関数を呼び出すと、スタックポインタはすべてのローカル変数に使用された領域の量によって調整されます。これは、調整された量を変更することですが、ローカル変数の有無にかかわらず調整を行う必要があります。 – Barmar

+3

これは、役に立たない早すぎる最適化の古典的なケースです。プロファイラを使用して、メモリ割り当てがコードのパフォーマンスに影響するボトルネックであることを確認しましたか?答えが* No *の場合、時間を無駄にして、実際の問題に移行する必要があります。 –

答えて

1

私はそれらをクラスそのものに保存する方が速いですか?

いいえ

ので、コンパイラがスタックにメモリを割り当てる

スタックポインタを移動させることと等価であるスタックにメモリを割り当てることはありません。さらに重要なことに、スタックは常に熱くなります。メモリは、ヒープ割り当てメモリよりもキャッシュに格納される可能性が高くなります。 Which is faster: Stack allocation or Heap allocationの続きを読む。


PS:時期尚早な最適化の犠牲者になることがないように注意してください。

関連する問題