4
UCLASS(abstract, config=Game, BlueprintType, hidecategories=("Pawn|Character|InternalEvents"))
class ENGINE_API ACharacter : public APawn
{
    GENERATED_UCLASS_BODY() 
...
    UPROPERTY(Transient)
    uint32 bClientWasFalling:1; 

    /** If server disagrees with root motion track position, client has to resimulate root motion from last AckedMove. */
    UPROPERTY(Transient)
    uint32 bClientResimulateRootMotion:1;

    /** Disable simulated gravity (set when character encroaches geometry on client, to keep him from falling through floors) */
    UPROPERTY()
    uint32 bSimGravityDisabled:1;

    /** 
     * Jump key Held Time.
     * This is the time that the player has held the jump key, in seconds.
     */
    UPROPERTY(Transient, BlueprintReadOnly, VisibleInstanceOnly, Category=Character)
    float JumpKeyHoldTime;

上記のコードは UE4 のものです。ブール値の代わりに uint32 の 1 ビットのビットフィールドを使用しているようです。なぜ彼らはこれをしているのですか?

4

1 に答える 1

9

スタンドアロンboolは少なくとも 1 バイトの長さです。プロセッサは、より小さい単位を処理できません。ただし、1 バイトが 8 ビット/ブール値を保持できることは誰もが知っているため、複数のブール値を特徴とするデータ構造がある場合、それぞれに 1 バイトは必要ありません。彼らはバイトを共有できます。これらの構造が多数ある場合は、メモリを節約できます。

于 2014-10-20T16:12:59.317 に答える