There are two main things that should be kept in mind: the native word size, and the endianness.<p>Quite often a lot of the struct is empty space, ferinstance you might have a 4-byte word. and you only want a single byte. Some systems will 'waste' 3 bytes, such that the byte in the struct is always at the beginning of the native 4-byte word access. And whether or not that happens, instead of packing as many bytes as possible together in a single 4-byte word maybe will mainly depend on your compiler.<p>Maybe I'm just too lazy, but I don't get hung up any more on how a particular struct is laid out in RAM, or whether that layout is wasteful or not. I just set it out as it suits me, and let the software and hardware work out what goes where for the best convenience of the system.<p>Many years ago, when I needed every byte I could get, I might have squeezed in every last byte. Not today. Not when we blithely throw whole gigabytes about.<p>As a curiosity, it might be worth spending 30 minutes over, but that's about it.
(I'm the author) Every wondered how C data structures are layouted and aligned in memory? Every wondered how C data structures are layouted and aligned in memory? This is the topic of the newest blog post in my hello-ebpf series.