看下面一个例子:

它的内存模型大致如下 :

我们稍微分析一下 :
a起始地址为0 ,满足内存对齐原则,最少占用4个字节。
b起始地址为4 ,满足内存对齐原则,最少占用4个字节。
c起始地址为8 ,满足内存对齐原则, 最少占用8个字节。
d起始地址为16,满足内存对齐原则, 最少占用1个字节,但是下一个域e的起始地址必须为sizeof(float) = 4的倍数,因此d占用了4个字节的内存,有3个字节的内存被“浪费”了。
e起始地址为20 ,满足内存对齐原则,最少占用4个字节。
f起始地址为24 ,满足内存对齐原则,最少占用1个字节,但是下一个域g的起始地址必须为sizeof(long long) = 8的倍数,因此f占用8个字节的内存,有7个字节的内存被“浪费”了。
g起始地址为32,满足内存对齐原则,最少占用8个字节。
h起始地址为40,满足内存对齐原则,最少占用4个字节,但是为了满足8字节对齐原则(因为整个结构体中单个域占用的最大内存为8),因此h会占用8个字节,有4个字节的内存被“浪费”了。
本文探讨了内存对齐在数据结构中的作用,通过一个例子展示了如何由于对齐原则导致内存空间的‘浪费’,并解释了每个成员变量的内存布局和对齐方式。
1747

被折叠的 条评论
为什么被折叠?



