April 2020
Intermediate to advanced
412 pages
9h 58m
English
Processors don't read and write data in bytes but in memory words—chunks that match their data address size. 32-bit processors work with 32-bit words, 64-bit processors with 64-bit words, and so on.
Reads and writes are most efficient when words are aligned—the data address is a multiple of the word size. For example, for 32-bit architectures, the 0x00000004 address is aligned, while 0x00000005 is unaligned.
Compilers align data automatically to achieve the most efficient data access. When it comes to structures, the result may be surprising for developers who are not aware of alignment:
struct { uint8_t c; uint32_t i; } a = {1, 1}; std::cout << sizeof(a) << std::endl;
What is the output of the preceding code snippet? The size ...