-1

私は約30人のメンバーを持つ構造体を持っています。このソースをインターネットで入手し、最適化しています (ゲーム エミュレーターのソース)。しかし、私の質問は、私は常に次のような構造体を使用してきたということです:

MY_STRUCT myStruct = {};
myStruct.a = 5;
myStruct.name = "name";
[..]

しかし、このソースでは、次のような奇妙なことがわかりました。

MY_STRUCT* myStruct = (MY_STRUCT*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(MY_STRUCT));

だから私の質問は、構造体にヒープ割り当てを使用することが本当に必要なのか、それとも を使用して初期化するだけのほうがよいのかということ{}です。Visual Studio 2012 (C++) を使用しています。

パフォーマンスまたはベストプラクティスの点でどちらが優れていますか?

4

2 に答える 2

3

最初のケースでは、ヒープではなくstackに構造体を割り当てます。これは、動的割り当てとは対照的に、スタック割り当てです。特に、動的に割り当てられたオブジェクトを解放する責任を負う必要がありますが、スタックに割り当てられたオブジェクトはそれ自体でクリーンアップされます (C++ の意味ではなく、C の意味で)。

パフォーマンスに関しては、スタック割り当てはほとんどの場合、動的割り当てよりも高速です (ヒープ内のスラブを検索して選択/注釈を付けるのではなく、スタック ポインターを移動するだけで、VMM を呼び出す可能性があります) が、オブジェクトのサイズとライフサイクルのコース。

于 2013-10-08T20:00:02.867 に答える
0

コンパイラはコードを最適化するために舞台裏で多くのことを行うことができるため、最適化は注意が必要です。同じくらい出てくることが多いです。

ただし、この場合、コードの最初のブロックがスタックに割り当てられ、2 番目のブロックがヒープにメモリを割り当ててポインターを返しているように見えるため、実際には 2 つの異なることを行っています。それがヒープ割り当ての場合は、すべてを 0 に設定しているため、2 番目の割り当ての方がおそらく高速です。

于 2013-10-08T20:00:10.917 に答える