结构体大小求值

简介:  内存对齐概念,struct例子: struct stu{   char a;    intb;   char c;   double d;   char e; } 取pack(n),n,取结构体中最大成员大小m,取两个小值k, k = m< n?m:n; 取每个成员大小p,依次同k比较,取小值q =


内存对齐概念,struct例子:

struct stu{

  char a;

   intb;

  char c;

  double d;

  char e;

}

  1. pack(n),n,取结构体中最大成员大小m,取两个小值k, k = m< n?m:n;

  2. 取每个成员大小p,依次同k比较,取小值q = k< p?k:p;

  3. 第二步当中依次取得的值,即为内对齐标准,所谓的对齐,即此处的地址可被q整除。

  4. K值可作为外部对齐补0的依据。

 

当有数组的时候拆散了当普通变量存储。

 

下面开始计算结构体中的大小

  1. k值。(pack(4))

    经分析,元素中占空间最大的是double类型的,其占8个字节。所以k =  8 < 4 ? 84;所以k = 4;

2、取每个成员大小p依次同k比较,取值q = k<p?k:p;

验证:

从图中可以知,和上面的理论是一致的。

目录
相关文章
|
8月前
位运算符&和>>配合给有位域的结构体赋值
v位运算符&和>>配合给有位域的结构体赋值
38 0
|
C++
35 C++ - 指针运算符(*、->)重载
35 C++ - 指针运算符(*、->)重载
69 0
|
8月前
|
存储 编译器 Linux
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
104 6
|
5月前
函数声明与函数表达式的区别是什么?
函数声明与函数表达式的区别是什么?
57 0
|
8月前
|
JavaScript 前端开发
函数声明与函数表达式的区别
函数声明与函数表达式的区别
39 2
|
8月前
|
C++
结构体变量与结构体变量指针作为函数参数
结构体变量与结构体变量指针作为函数参数
80 0
|
8月前
|
C语言
用结构体变量和结构体变量的指针做函数参数
用结构体变量和结构体变量的指针做函数参数
107 3
|
8月前
|
存储 C语言
C语言中定义结构体类型变量的深入探索
C语言中定义结构体类型变量的深入探索
67 0
|
存储
函数声明与函数表达式的区别?
函数声明与函数表达式的区别?
42 0
|
C++
38 C++ - 函数调用符号()重载
38 C++ - 函数调用符号()重载
43 0