关于内存分配的几个原则
来源:互联网 发布: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)
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
- 关于内存分配的几个原则
- 关于内存分配的几个例子
- FPGA引脚信号分配的几个原则
- 关于内存地址分配之几个注意事项
- 【Java JVM】Java虚拟机内存分配几个原则
- 关于内存的分配
- 关于refactor的几个原则
- 设置JVM内存分配的几个妙招
- DMA分配内存常用的几个函数
- 程序的内存分配到几个部分?
- 关于linux的内存分配
- 关于DB2的内存分配
- 关于DB2的内存分配
- 关于JVM的内存分配
- 关于JavaScript的内存分配
- 关于内存的分配问题
- 小白请教几个关于Java虚拟机内存分配策略的问题
- 关于对象设计的几个原则
- Java Tips
- PHP 操作redis 详细讲解转的
- Apache Maven 入门篇(下)
- Js中escape(),encodeURI()和encodeURIComponent()
- sqlMapConfig
- 关于内存分配的几个原则
- 以指针和引用两种参数实现删除单链表L中所有值为X的结点的函数
- GitHub详细教程
- S3C6410 之裸机程序烧写
- Erlang Application
- UML建模之时序图(Sequence Diagram)
- 【iOS知识学习】_iOS中Json解析的四种方法
- 点到平面的基本距离推导公式
- 【jquery前端开发】可调整的幻灯片(图片轮播)