结构体的对齐原则

一、C语言结构体对齐步骤:

        1.每个成员对齐

        2.总体对齐

二、C语言结构体对齐规则:

1.结构体第一个成员存放在相较于结构体变量起始位置的偏移量为0的位置

2.从第二个成员开始,往后的每一个成员都要对齐到某个对齐数的整数倍处。

        对齐数:结构体成员自身的大小和默认对齐数的较小值

        VS上默认对齐数是8

        gcc 没有默认对齐数,对齐数就是他本身大小

3.结构体的总大小,必须是最大对齐数的整数倍

   最大对齐数是:所有成员的对齐数中最大的值

4.如果嵌套了结构体,嵌套的结构体对齐原则:他内部最大的成员的整数倍。结构体提总体大小就是所有最大对齐数(含嵌套结构体成员中最大的成员)的整数倍。

三、讲解: 

#include<stdio.h>
struct s1
{            //自身大小  默认对齐数   最终对齐数
	double d;  //   第一个成员没有对齐数
	char c;    // 1         8           1 
	int i;     // 4         8           4
};
struct s2
{            //自身大小  默认对齐数   最终对齐数
	char c1;  //    第一个成员没有对齐数
	struct s1 s1;   //嵌套结构体的成员最大为8 ,对齐数就是8  ,自身大小为16
	char c2; //  1           8           1
};
int main()
{
	struct s2 s;
	printf("%d",sizeof(s));
	return 0;
}

初步来看s变量的大小为  1+7+16+1=25

最终s变量的大小还要是:最大对齐数的整数倍,

而s的成员的最大对齐数是 8,所以应该是8的倍数,

 所以最终s的大小是32

相关推荐

  1. 结构:修改默认对齐数、结构传参

    2024-05-02 01:38:02       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 01:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 01:38:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 01:38:02       82 阅读
  4. Python语言-面向对象

    2024-05-02 01:38:02       91 阅读

热门阅读

  1. Open CASCADE学习|GeomFill_CurveAndTrihedron

    2024-05-02 01:38:02       30 阅读
  2. DeFi 基础知识:去中心化金融及其运作方式

    2024-05-02 01:38:02       28 阅读
  3. SQL常用语句与事务介绍

    2024-05-02 01:38:02       30 阅读
  4. 【Redis基础】Redis知识体系详解-Redis概念和基础

    2024-05-02 01:38:02       27 阅读
  5. v-model原理(简易源码版)

    2024-05-02 01:38:02       38 阅读
  6. DirectX与OpenGL:图形编程接口的对比与选择

    2024-05-02 01:38:02       33 阅读
  7. 01 Linux开发环境

    2024-05-02 01:38:02       31 阅读