Padding

Learn about padding and alignment in user-defined types.

We'll cover the following...

Understanding padding

The compiler sometimes needs to add extra bytes, padding, to our user-defined types. When we define data members in a class or struct, the compiler is forced to place the members in the same order as we define them.

However, the compiler must also ensure that the data members inside the class have the correct alignment; hence, it needs to add padding between data members if necessary. For example, let’s assume we have a class defined as follows:

Press + to interact
class Document {
bool is_cached_{};
double rank_{};
int id_{};
};

Now let’s calculate the size:

Press + to interact
std::cout << sizeof(Document)<< '\n'; // Possible output is 24

The reason for the possible output being 24 is that the compiler inserts padding after bool and int to fulfill the alignment requirements ...