首页 > 代码库 > 结构体内存对齐——
结构体内存对齐——
什么是内存对齐
编译器为每个“数据单元”安排在某个合适的位置上;
C,C++语言非常灵活,它允许你干涉“内存对齐”
为什么要对齐
性能原因:在对齐的地址上访问数据快
如何对齐
第一个数据成员放在offset为0的位置
其它成员对齐至min(sizeof(member),#pragma pack()所指定的值)的整数倍。
整个结构体也要对齐,结构体的总大小对齐至各个成员中最大对齐数的整数倍。
#include<iostream>#include <stdio.h>using namespace std;struct Test{ char a; double b; char c;};//第一个成员与结构体变量的偏移量为0(第一个成员与结构体存在一块,所以地址一样)//其它成员要对齐某个数(对齐数)的整数倍的地址//对齐数取编译器预设的一个对齐整数与该成员大小的较小值//结构体总大小为最大对齐数的整数倍/*结构体里的第一个大小就是结构体的大小(地址相同),char大小本来是1,但它在第一个,所以char的大小应该就是结构体大小(8)其它大小就看本身与系统的大小,取较小值(对齐数),比如,int是4,系统默认8,所以应该是4*/int main(){// 说明test跟test.a地址是一样的,也就是说结构体第一个大小跟系统一致 Test test; char *p = (char*)&test; printf("p=%p\n", p); p = &test.a; printf("p=%p\n", p); cout << sizeof(Test) << endl; return 0;}
结构体内存对齐——
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。