内存对齐

内存对齐的原因:

  • 以空间换时间

对于自定义数据类型对齐规则:

  • 从第一个属性开始 偏移为0
  • 第二个属性开始,地址要放在 该类型整数陪 与 对齐模数比 取小的值 的整数陪上
  • 所有的属性都计算结束后,整体再做二次对齐,整体需要放在属性中做大类型 与 对齐模数比 取小的值的整数倍上

如何查看对齐模数

  • #pragma pack(show)
  • 默认对齐模数 是8,可以将对齐模数改为 2的n次方

当结构体嵌套结构体时候,只需要看结构体中最大数据类型就可以了

代码示例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#pragma pack(show)//可以查看对齐模数
//#pragma pack(1)//默认对齐模数为8 对齐模数可以改为 2的次方
//对于自定义数据类型 内存对齐规则如下
//1.从第一个属性开始 偏移为0
//2.第二个属性开始,地址要放在 该类型整数陪 与 对齐模数比 取小的值 的整数陪上
//3.所有的属性都计算结束后,整体再做二次对齐,整体需要放在属性中做大类型 与 对齐模数比 取小的值的整数倍上
typedef struct _STUDENT
{
   
        int a;//0~3 
        char b;//4~7
        double c;//8~15
        float d;//16~19
}Student;
void test01()
{
   
        printf("size of=%d\n",sizeof(Student));
}
//当结构体嵌套结构体时候,只需要看结构体中最大数据类型就可以了
typedef struct _STUDENT2
{
   
        char a;//0~7
        Student b;     //8~31
        double c;      //32~39
}Student2;
void test02()
{
   
        printf("size of=%d\n", sizeof(Student2));
}
int main()
{
   
        //test01();
        test02();
        return EXIT_SUCCESS;
}
C/C++基础 文章被收录于专栏

本专栏收录C/C++编程语言相关知识

全部评论

相关推荐

兄弟们,实习都是在接各种api,该怎么包装简历
仁者伍敌:感觉我自己做小项目也是各种api啊,我要怎么包装简历
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 18:25
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务