数据结构 计算结构体大小

一、规则:

操作系统制定对齐量:

64位操作系统,默认8Byte对齐

32位操作系统,默认4Byte对齐

结构体对齐规则:

1.结构体整体的大小,需要是最大成员对齐量的整数倍

2.结构体中每一个成员的偏移量需要存在其对齐量整数倍的位置

3.成员的对齐量=成员本身的大小<操作系统对齐量?成员本身的大小:操作系统指定对齐量

(若成员大小>8,就取8,若成员大小<8,就取成员大小)

二、数据类型

类型                    所占空间大小

int                              4B

short int                     2B

long int            64: 8B       32:4B

long long                   8B

float                           4B

double                       8B

*p                   64:8B        32:4B

三 、实例(默认都为64位)

1.

typedef struct Test
{int a;  char c;double b;long int p;
}T;

成员对齐量=8B

解析:其中最大的为long int为8B

大小=24B

2.

typedef struct Stu
{char name[5];  int age; char sex; double score; 
}S;   

成员对齐量为:8B

大小=24B

3. 

typedef struct A
{long int a;  short b;    int *p;   float q;  
}A;  

成员对齐量=8

大小=32B

4.

struct C{char b;int a;short c;
};

成员对齐量=4B

解析:结构体最大的是int型,为4B

成员本身的大小<操作系统指定对齐量,4<8,所以成员对齐量=4B

大小=12B

5.结构体嵌套(先计算内部结构体,将内部的结构体对齐,再计算外部)

typedef struct Test{short a;struct {int b;double c;char d;}p;int e;
}Test;

成员对齐量=8B

大小=40B

6.

typedef struct Test {short a;struct {int b;double c[10];char d;};int e;
}Test;

成员变量=8B

大小=112B

7.指定对齐字节(#pragma pack() ,()中只能是2的幂次)

#pragma pack(2)   //指定二字节对齐,()中只能是2的幂次
typedef struct
{char c;  struct A{short a; int *b;  char c; }p;  long b;  int a;  
}T; 
#pragma pack() //取消指定对齐

成员对齐量=2B

大小=26B 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/491375.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义el-upload 上传文件

前言 最近在做一个文件上传的功能&#xff0c;后端接口写好了、发现前端上传文件的页面不会写……&#xff08;我很笨的&#xff09;然后我就找啊找发现element有个组件是<el-upload/>能直接上传文件。我就想直接用拿来改改改成自己想要的&#xff0c;可是就是这样我花了…

SpringMVC 学习(六)之视图

目录 1 SpringMVC 视图介绍 2 JSP 视图 3 Thymeleaf 视图 4 FreeMarker 视图 5 XSLT 视图 6 请求转发与重定向 6.1 请求转发 (Forward) 6.2 重定向 (Redirect) 7 视图控制器 (view-controller) 1 SpringMVC 视图介绍 在 SpringMVC 框架中&#xff0c;视图可以是一个 J…

2.23日学习打卡----初学Nginx(二)

2.23日学习打卡 目录: 2.23日学习打卡一. Nginx 虚拟主机虚拟主机的分类Nginx支持三种类型的虚拟主机配置Nginx虚拟主机单网卡多IP配置Nginx虚拟主机_基于域名虚拟主机配置Nginx虚拟主机基于多端口的配置4 二. Nginx 核心指令root和alias指令的区别return指令rewrite指令rewrit…

机器学习打分函数在分子对接中的应用系列-GB_Score

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、GB-Score是什么&#xff1f;二、文献复现 -训练和验证环境1. GB score验证虚拟环境的配置2. Usage1- Preparing ligand and protein file2- Generating features3 - Repeat and extend current…

javascript监听浏览器离开、进入行为

document.addEventListener(visibilitychange, () > {if (document.visibilityState hidden) {alert(离开)}if (document.visibilityState visible) {alert(进入)}}) visibilitychange是浏览器新添加的一个事件&#xff0c;当其选项卡的内容变得可见或被隐藏时&#xff0…

一. demo

1. 舞台-场景-控件 import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.stage.Stage;import java.util.Arrays;public class Main e…

m估计及其c++简单实现

文章目录 什么是m估计怎么求解m估计呢&#xff1f;Huber函数时的线性m估计 什么是m估计 自20世纪60年代稳健统计建立以来&#xff0c;在国内外众多学者的研究之下&#xff0c;诞生了一系列稳健统计重要理论和成果。其中最主要且广泛使用的稳健统计有以下三类&#xff1a; L-e…

【数据集】世界水评估方案指标:灌溉面积/灌溉用水等

世界水评估方案指标 概述(Overview)数据下载(Data Download)案例1:F. Irrigated lands案例2:G. Irrigated water use参考World Water Development Report II-Indicators for World Water Assessment Programme 概述(Overview) 在关于全球环境变化和可持续发展的辩论…

搭建非maven spring boot项目 并且idea进行打包

1.所需jar包 2.搭建web项目 3 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class SpringBootTemplateApplications { public static void main(String\[\] ar…

利用缓冲区模拟进度条加载

界面呢非常简洁&#xff0c;代码也非常简单&#xff0c;非常适合有用来练手或者消遣。 以下就是进度条的样子咯&#xff0c;感兴趣的朋友可以自己去“美化”一下hh ProgressBar.c文件 用来定义ProcBar函数&#xff0c;该函数就是实现进度条的主核心代码&#xff0c;用“#”表示…

05 EXTI外部中断

一、中断系统 中断系统&#xff1a;管理和执行中断的逻辑结构。中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件——中断源&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继…

Java/Python/Go不同开发语言基础数据结构和相关操作总结-GC篇

Java/Python/Go不同开发语言基础数据结构和相关操作总结 1. 常见gc方式1.1 gc判断对象是否存活1.2 引用计数法1.2 标记-清除算法1.3 复制算法1.4 标记-压缩算法1.5 分代收集算法 2. java的gc方式以及垃圾回收器2.1 gc方式2.1 gc回收器2.1.1 Serial收集器2.1.2 ParNew收集器2.1.…