fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

UE5/UE4 C++で配列の領域をあらかじめ確保(事前割り当て)した状態で扱う(Reserve、Reset、Empty、Shrink、Compact)

C++で配列の領域をあらかじめ確保(事前割り当て)した状態で扱う方法です。

こちらを参考にさせていただきました。

・パフォーマンスを高めるために TArray の使用を最適化する
https://www.unrealengine.com/ja/blog/optimizing-tarray-usage-for-performance?sessionInvalidated=true

公式ドキュメントはこちら。

・TMap
https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/TMap/

上記ドキュメントの「スラック(Slack)」と呼ばれる部分が上記に該当するようです。

領域の確保には「Reserve」関数を使います。

// 領域確保
TArray< FName> aNameList;
aNameList.Reserve(16);

これで16個分の配列の領域が確保されるようです。

この確保された状態で「Empty」関数を実行してしまうと確保したものがすべて削除されてしまいます。
確保した領域を保持したまま要素をすべて削除する場合は「Reset」関数を使います。

// 領域を確保したまま要素をすべて削除
TArray< FName> aNameList;
aNameList.Reset();


「Reserve」関数で設定したサイズ以外で要素を削除したい場合は
「Empty」関数に引数を指定
することでも制御することができます。

Reset を呼び出すか、0 ではないスラック パラメータを指定して Empty を呼び出すことで、使用中のメモリの割り当てを解除することなく要素を削除することができます。

ここらへんですね。

確保した領域を削除したい場合は「Empty」関数を使うか、
「Compact」関数と「Shrink」を組み合わせる
ことで制御することができます。

すべてのスラックを削除するには、Shrink を実行する準備のために、まず Compact 関数を呼び出して、空いたスペースをまとめます。

上記の使い方をどこでするかはあまり想定できないのですが、
詳しくは公式ドキュメントの挙動を見てもらったほうが良いと思います。

なるべく効率よくゲームが作れるようこういったテクニックも覚えておきたいですね。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/720-de0bd01d

TRACKBACK

PREV | PAGE-SELECT | NEXT