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()
と呼ばれていますか?
スタックにメモリを割り当てるには時間がかかりません。 – Barmar
関数を呼び出すと、スタックポインタはすべてのローカル変数に使用された領域の量によって調整されます。これは、調整された量を変更することですが、ローカル変数の有無にかかわらず調整を行う必要があります。 – Barmar
これは、役に立たない早すぎる最適化の古典的なケースです。プロファイラを使用して、メモリ割り当てがコードのパフォーマンスに影響するボトルネックであることを確認しましたか?答えが* No *の場合、時間を無駄にして、実際の問題に移行する必要があります。 –