一个结构体在内存中占据的大小究竟是如何计算的?

2026-04-11 09:280阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计815个文字,预计阅读时间需要4分钟。

一个结构体在内存中占据的大小究竟是如何计算的?

关于结构体内存大小问题,我们首先要了解一个相关概念——位移量。位移量指的是结构体变量中成员的地址和结构体变量地址的差值。结构体大小等于最后一位成员的位移量加上1。

关于结构体内存大小问题

我们首先要了解一个相关概念————偏移量。偏移量指的是结构体变量中成员的地址和结构体变量地址的差。结构体大小等于最后一个成员的偏移量加上最后一个成员的大小。

struct book { int num1; char c1; }book1;

假定我们定义一个结构体book1,第一个成员变量num1,此时num1的偏移量为0(因为此刻的num1地址为该结构体所占内存空间的首地址,所以两者之间的差为0),此刻所使用的内存空间是(0+4)(偏移量+该变量的字节大小),第二个成员变量为c1,偏移量为前面变量的偏移量之和为4。而此时的通过sizeof输出的结果却不是5(4+1,偏移量+该变量的字节大),是为什么呢?

在实际中,存储变量时地址要求对齐,编译器在编译程序时会遵循两条原则:

  1. 结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)
  1. 结构体大小必须是所有成员大小的整数倍,也即所有成员大小的公倍数。

在我们刚才所定义的结构体book1中,我们所认为的结果是5,但是在该对齐规则中,5并不是int所占字节的倍数,因此会在变量c1后面补上3个字节的空间。

阅读全文

本文共计815个文字,预计阅读时间需要4分钟。

一个结构体在内存中占据的大小究竟是如何计算的?

关于结构体内存大小问题,我们首先要了解一个相关概念——位移量。位移量指的是结构体变量中成员的地址和结构体变量地址的差值。结构体大小等于最后一位成员的位移量加上1。

关于结构体内存大小问题

我们首先要了解一个相关概念————偏移量。偏移量指的是结构体变量中成员的地址和结构体变量地址的差。结构体大小等于最后一个成员的偏移量加上最后一个成员的大小。

struct book { int num1; char c1; }book1;

假定我们定义一个结构体book1,第一个成员变量num1,此时num1的偏移量为0(因为此刻的num1地址为该结构体所占内存空间的首地址,所以两者之间的差为0),此刻所使用的内存空间是(0+4)(偏移量+该变量的字节大小),第二个成员变量为c1,偏移量为前面变量的偏移量之和为4。而此时的通过sizeof输出的结果却不是5(4+1,偏移量+该变量的字节大),是为什么呢?

在实际中,存储变量时地址要求对齐,编译器在编译程序时会遵循两条原则:

  1. 结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)
  1. 结构体大小必须是所有成员大小的整数倍,也即所有成员大小的公倍数。

在我们刚才所定义的结构体book1中,我们所认为的结果是5,但是在该对齐规则中,5并不是int所占字节的倍数,因此会在变量c1后面补上3个字节的空间。

阅读全文