struct结构的内存对齐
来源:互联网 发布:视唱练耳软件 编辑:程序博客网 时间:2024/05/17 23:33
struct结构的内存对齐
内存对齐的主要作用是:
1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2、性能原因:经过内存对齐后,CPU的内存访问速度大大提升。内存对齐的意义,cpu读取内存数据不是一个个读取,是一片片读取,而且都是2的倍数2,4,,8,16,如果内存不对齐,比如只读了后台的5个字节,前面的3个字节需要额外的处理,占用了cpu的处理时间,影响cpu的性能。
先说下 #pragma pack(n) 表示设置为n字节对齐。
对齐分作两部分,一部分是结构里面的数据 二部分是整个结构体本身。
1 结构里面的数据需要偏移,偏移量是#pragma pack(n)和结构本身占用空间中较小的数的倍数2 结构里面整体的占用空间也必须对齐,占用的空间是#pragma pack(n)和最大数据成员长度中较小的数的倍数typedef struct { char aChar;//1 float aFloat;//4 short aShort;//2}t1;typedef struct { char aChar;//1 short aShort;//2 float aFloat;//4}t2;t1的空间占用分析: 在规则1中:放入char,然后偏移4个位置,放入float,在放入short,占用10个位置 规则2中:总位置4(short)*3 使用了12个位置 所以sizeof(t1) = 12t2的空间占用分析 在规则1中:放入char,然后偏移2个位置,放入short,在放入int,占用8个位置 规则2中:总位置4(short)*2 使用了8个位置 所以sizeof(t1) = 8来个复杂点的 typedef struct{ t1 data1;//12 t2 data2;//8 }t3; 针对只含有struct的struct结构大小只是他们的和更有意思点的 typedef struct{ int a;//4 t1 data1;//12 t2 data2;//8 short b;//2 }t4; 在规则1中:放入int,不偏移,放入t1,然后放入t2,应该是偏移的,可刚好是short的倍数 规则2中:总位置4(short)*7 使用了28个位置 所以sizeof(t4) = 28
//// main.c// struct_align//// Created by bikang on 16/10/12.// Copyright (c) 2016年 bikang. All rights reserved.//#include <stdio.h>#pragma pack(8)void talign();int main(int argc, const char * argv[]) { talign(); return 0;}void talign(){ typedef struct { char aChar;//1 float aFloat;//4 short aShort;//2 }t1; typedef struct { char aChar;//1 short aShort;//2 float aFloat;//4 }t2; typedef struct{ t2 data2;//8 t1 data1;//12 }t3; typedef struct{ int a;//4 t1 data1;//12 t2 data2;//8 short b;//2 }t4; printf("sizeof t1=%ld\n",sizeof( t1)); printf("sizeof t2=%ld\n",sizeof(t2)); printf("sizeof t3=%ld\n",sizeof(t3)); printf("sizeof t4=%ld\n",sizeof(t4));}
内存对齐
0 0
- struct结构的内存对齐
- C语言结构struct的内存对齐
- struct的内存对齐(转)
- struct的内存对齐方式
- struct的内存结构
- struct结构体占有内存问题。内存对齐
- C风格struct结构体的对齐
- 结构体struct的对齐问题
- 结构体(struct)的使用、内存分布以及字节对齐测试总结
- 结构体(struct)的使用、内存分布以及字节对齐测试总结
- C#中struct的内存对齐
- 关于 Struct 内存对齐的几个例子
- struct的内存对齐(转)
- struct的内存对齐详细讲解
- struct自然边界上的内存对齐
- struct成员的内存对齐问题:
- 关于struct的内存对齐问题
- struct结构对齐
- 使用Android Studio2.2进行NDK编程创建示例
- 点击空白处隐藏软键盘(点击EditText以外的地方隐藏软键盘)
- openwrt交叉编译应用程序之helloworld
- User Notifications Framework in iOS 10
- 正则表达式-匹配密码验证(密码强弱等级,不能匹配中文,匹配数字 字母 字符)
- struct结构的内存对齐
- python小练习2:删除列表中重复的元素
- Android 反编译 -smali语法
- PHP模拟登陆
- ELK性能优化
- Codeforces 450B Jzzhu and Sequences(矩阵快速幂)
- Ubuntu下格式化U盘的方法(基于格式化命令)
- 自定义实现ListView左滑删除
- 动画的简单应用