关于内存分配的几个原则

来源:互联网 发布:android打开移动数据 编辑:程序博客网 时间:2024/05/18 02:22
关于结构体内存分配的几个原则:
      1 结构体每个成员相对于结构体首地址的偏移量(offset)都是这个成员的大小的整数倍,
如有需要编译器会在成员之前加上填充字。例如下面的结构体:
struct ex{
int i;
char t;
int n;
}
第一个成员偏移量为0,是int型成员大小的4的整数倍,第二个成员的大小为1,由于前面的
偏移量为4,是1 的整数倍,所以可以不用填充字,第三个成员的大小为4,前面的偏移量为
5,不是4的整数倍,所以要加3个字节构成4的整数倍,即总大小为4+1+3+4=12字节;
      2 结构体的总大小为最宽的成员大小的整数倍,如有需要编译器会在成员之前加上填充字。
      3 结构体的首地址能够被其最宽的成员的大小整除。
      4 对于结构体成员属性中包含结构体变量的复合型结构体,在确定最宽基本类型成员时应当包括
        复合型成员的子成员。但在确定复合型成员偏移位置时则是将复合型作为整体看待。
      5 结构体的大小等于最后一个成员的偏移量加上其大小再加上末尾的填充字节数, 
         即:sizeof(struct) = offsetof(last item)+sizeof(last item)+ sizeof(trailing padding)
         
0 0