Introducing Struct Layout

April 17, 2018

I’ve built a fun little tool to help understand the way a C or C++ compiler will layout members in a struct or class. Behold, Struct Layout. This tool uses the Layout utility behind the scenes. Layout parses C and C++ code using libclang. It generates C code with proper sizeof and offsetof operators to output a table including the size of each type, the size, offset, and padding for each field.

This information can be useful, as it may be surprising how a compiler lays out a given type in memory. The compiler may need to deal with platform-specific alignment requirements for certain types. If you are writing cross-platform code, it can be useful to understand how compilers behave on all of your target platforms.

If you are thinking about data-oriented design, data layout can be rather important. Knowing the number of object which fit into a cache line can inform your decisions about how algorithms can best make use of processor and memory resources.

I’ve already found this tool useful for day-to-day work, I hope that you do as well!


Content © Josh Peterson

Site design by Sirupsen