联合体、结构体的一些整理
来源:互联网 发布:软件开发质量管理 编辑:程序博客网 时间:2024/05/11 13:07
内存地址
0x4000 0x34
0x4001 0x12
内存地址
0x4000 0x12
0x4001 0x34
看下面的数据结构声明:
struct A
{
char c;
int i;
};
struct A a;
2
有效对齐N,就是表示“对齐在N上”,也就是说该数据的"存放起始地址%N=0"。.而数据结构中的数据变量都是按定义的先后顺序来排放的。
struct A
{
char c;
i; int
s; short
};
首先来看sizeof(struct A),假设A的起始地址为0x00,做这样的假设只是为了更方便理解,其实A始终被放在对齐边界上。
数据成员c的自身对齐值=1,指定对齐值=4,所以其有效对齐值为1,因0x00%1==0,所以它被存放在0x00处;数据成员i的自身对齐值=4,指定对齐值=4,可得出其有效对齐值为4,因0x01%4 != 0,因此它应该被存放在0x04地址处,并占用0x05,0x06,0x07共4个字节;接下来看数据成员s的自身对齐值=2,指定对齐值=4,得出有效对齐值为2,因0x08%2 == 0,因此它被存放在起始地址为0x08处,并占用2字节;最后再看数据结构A自身的对齐值=4(最大数据成员自身对齐值),指定对齐值=4,得有效对齐值为4,对于结构体或者类,要将它们补充成其有效对齐值的整数倍,这点请千万注意)。由此可见sizeof(struct A)的结果应该是=1+3(空闲空间)+4+2+2(结构体补充)=12字节
- 联合体、结构体的一些整理
- 联合体里面的结构体
- 结构体,联合体的对齐
- 指针、结构体、联合体的安全规范
- 结构体、联合体、枚举的特性
- 指针、结构体、联合体的安全规范
- 指针、结构体、联合体的安全规范
- 指针、结构体、联合体的安全规范
- 结构体与联合体的用法
- 结构体、联合体的安全规范
- 联合体和结构体的区别
- 结构体和联合体的知识总结
- 结构体和联合体的区别
- 指针、结构体、联合体的安全规范
- 结构体和联合体的区别
- 联合体与结构体的区别
- 联合体和结构体的区别
- 【笔试】结构体和联合体的区别
- 你真的理解clear:both吗?
- 关于宏的副作用
- 关键字的总结
- 初学 DIV+CSS? 有问题需要您关注…
- ABAP--如何暂停其他进程的处理,加速当前程序的处理速度 .
- 联合体、结构体的一些整理
- 十个SEO技巧知识
- 《深入理解计算机系统》读书笔记
- 关于字符串逆序
- 插入flash简单代码
- C++总结
- 服务器安全设置
- 内核符号导出
- prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: /lib/libc.so.6: version `GLIBC_2.11' n