Почему я должен использовать 1-битные битовые поля вместо bools?

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 вместо bool. Почему они это делают?

3

Решение

Автономный bool длиной не менее одного байта. Процессор не может обрабатывать меньшие единицы. Однако мы все знаем, что байт может содержать 8 бит / бул, поэтому если у вас есть структура данных, содержащая несколько булев, вам не нужен байт для каждого. Они могут поделиться байтом. Если у вас много таких структур, это может сэкономить память.

7

Другие решения


По вопросам рекламы [email protected]