devxlogo

Optimizing Member Alignment

Optimizing Member Alignment

A class’s size can change simply by playing with the order of its members’ declaration. For example:

 struct A{ bool a; int b; bool c;}; // sizeof (A) == 12

On my machine, sizeof (A) equals 12. This result might seem surprising because the total size of A’s members is only 6 bytes: 1+4+1 bytes. Where did the remaining six bytes come from? The compiler inserted three padding bytes after each bool member to make it align on a word boundary. You can reduce A’s size by reorganizing its data members as follows:

 struct B{ bool a; bool c; int b;}; // sizeof (B) == 8

This time, the compiler inserted only two padding bytes after the member c. Because b occupies four bytes, it naturally aligns on a word boundary without necessitating additional padding bytes.

As a rule, if your class has several data members of various types,declare the members that occupy a small size (less than the size of anint) successively.

devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist