Memory Alignment in C Structures
When working with C structures, understanding memory alignment is crucial. Memory alignment refers to the placement of data in memory at specific boundaries. On a 32-bit machine, memory is typically aligned on 4-byte boundaries.
Memory Alignment for Structures
Consider the following struct:
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; } myStruct;</code>
Each unsigned short occupies 2 bytes. In theory, the size of myStruct should be 2 * 3 = 6 bytes. However, memory alignment may affect the actual size.
In this case, myStruct is aligned to a 2-byte boundary since the largest data member is unsigned short, which is 2 bytes. Therefore, no padding is needed between the members, and the size of myStruct remains 6 bytes.
Padding for Structures
Now consider this modified struct:
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; int i; } myStruct;</code>
Adding an int member changes the size and alignment of the structure. int is 4 bytes, so the alignment of myStruct is rounded up to 4 bytes.
To align properly, 2 bytes of padding are inserted between v3 and i. This results in a total size of 6 2 4 = 12 bytes for myStruct.
Conclusion
Memory alignment ensures that data is placed efficiently in memory. The alignment requirements are based on the size of the largest data member within the structure. Understanding these principles is essential for optimizing memory usage and maintaining code efficiency.
The above is the detailed content of How Does Memory Alignment Affect the Size of C Structures?. For more information, please follow other related articles on the PHP Chinese website!