4.3.8 Piecemeal Structure Allocations

Structures should always be allocated using the sizeof() operator on the name of the structure. Never use the sum of the sizes of the structure's members because it does not take into account the padding that the compiler introduces to guarantee alignment. The following example shows two examples for allocating memory for a structure. The first allocation is incorrect, the second allocation is correct.

Example 14-Incorrect and correct piecemeal structure allocation
typedef struct {
  UINT8 Value8;
  UINT64 Value64;
} EXAMPLE_STRUCTURE;

EXAMPLE_STRUCTURE *Example;

//
// Wrong. This only allocates 9 bytes, but MyStructure is 16 bytes
//
Example = AllocatePool (sizeof (UINT8) + sizeof (UINT64));

//
// Correct. This allocates 16 bytes for MyStructure.
//
Example = AllocatePool (sizeof (EXAMPLE_STRUCTURE));