The compiler sometimes needs to add extra bytes, padding, in 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 also has to ensure that data members inside the class have the correct alignment; hence, it needs to add padding between data members if necessary. For example, assume we have a class defined as follows:
class Document { bool is_cached_{}; double rank_{}; int id_{}; };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 of the individual data members ...