数据结构 计算结构体大小

一、规则:

操作系统制定对齐量:

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.mzph.cn/news/693981.shtml

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

相关文章

Selenium常见问题解析

1、元素定位失败&#xff1a; 在使用Selenium自动化测试时&#xff0c;最常见的问题之一是无法正确地定位元素&#xff0c;这可能导致后续操作失败。解决方法包括使用不同的定位方式&#xff08;如xpath、CSS selector、id等&#xff09;&#xff0c;等待页面加载完全后再进行…

【Oracle】玩转Oracle数据库(三):数据库的创建和管理

前言 嘿&#xff0c;各位数据库小能手们&#xff01;今天我们要进入数据库的创世纪&#xff0c;探索Oracle数据库的创建和管理&#xff01;&#x1f527;&#x1f4bb; 在这篇博文【Oracle】玩转Oracle数据库&#xff08;三&#xff09;&#xff1a;数据库的创建和管理中&#…

详解动态内存管理!

目录 ​编辑 1.为什么要用动态内存分配 2.malloc和free 2.1 malloc 2.2 free 3.calloc和realloc 3.1 calloc 3.2 realloc 4.常见的动态内存的错误 4.1 对NULL的解引用操作 4.2 对动态内存开辟空间的越界访问 4.3 对非动态内存开辟空间用free释放 4.4 使用free释放动…

【北京游戏业:出海竞争实力全面】

本文将深入分析北京的游戏行业发展。在上海、广州、北京、深圳、成都、杭州、福建七大游戏产业中心城市中&#xff0c;北京无疑是出海竞争力最强的游戏产业集群。本文将全面剖析北京游戏行业的发展现状。 北京是中国游戏产业的发源地。拥有从游戏引擎到美术设计等完整的产业链…

如何在Shopee平台上选择爆款商品:借鉴爆款属性的有效策略

在当今激烈竞争的电商市场中&#xff0c;想要在Shopee平台上取得成功&#xff0c;卖家需要精心选择潜在的热销产品。借鉴爆款商品的属性是一种行之有效的策略&#xff0c;能够帮助卖家快速找到市场上的热门商品。通过分析市场趋势、竞品表现、社交媒体趋势等多方面因素&#xf…

【EI会议征稿通知】第四届自动化控制、算法与智能仿生学术会议(ACAIB 2024)

第四届自动化控制、算法与智能仿生学术会议(ACAIB 2024) 2024 4th Conference on Automation Control, Algorithm and Intelligent Bionics 第四届自动化控制、算法与智能仿生学术会议&#xff08;ACAIB 2024&#xff09;将于2024年6月7日-9日在中国银川举行。 本届大会由北…

leetcode hot100 完全平方数

本题中&#xff0c;是给一个整数n&#xff0c;让用完全平方数凑出这个整数&#xff0c;注意&#xff0c;题中给了n的范围&#xff0c;是大于等于1的&#xff0c;也就是说&#xff0c;dp[0]我们可以先不考虑。 整个问题可以抽象成完全背包问题的变形形式&#xff0c;物品就是这…

在 React 中使用 i18next支持多语言

基本用法 安装依赖包 npm i i18next react-i18next i18next-browser-languagedetector --savei18next 提供了翻译的基本能力; react-i18next 是 i18next 的一个插件&#xff0c;用来降低 react 的使用成本; i18next-browser-languagedetector 是用来检测浏览器语言的插件。 …

搜维尔科技:OptiTrack探索人类与技术之间关系的开创性表演

另一种蓝色通过 OptiTrack 释放创造力 总部位于荷兰的当代舞蹈团因其探索人类与技术之间关系的开创性表演而受到广泛赞誉。该公司由富有远见的编舞家大卫米登多普创立&#xff0c;不仅利用技术作为探索的主题&#xff0c;而且将其作为表达故事的动态工具。 “我一直对文化与…

【Java面试系列】JDK 1.8 新特性之 Stream API

目录 一、Stream 简介二、Stream 特点&#xff1a;Stream 注意点&#xff1a;1、什么是聚合操作2、Stream 流1、什么是流2、流的构成3、stream 流的两种操作4、惰性求值和及早求值方法5、Stream 流的并行 三、Stream操作的三个步骤1、创建流第一种&#xff1a;通过集合第二种&a…

ping 8.8.8.8和ping www.baidu.com都OK,但是打不开网页

ping 8.8.8.8和ping www.baidu.com都OK&#xff0c;但是打不开网页 打开设置 -> 网络 找到IPV4, DNS栏输入 8.8.8.8 , apply 设置里界面变成这样 然后网页就能加载了

mysql(五) buffer pool(缓存页数据与索引数据)

前面写了很多mysql的实用基础知识、接下来我将总结整理一些进阶和更深的一些知识、你知道的越多、不知道就越多、让我们一起学习。 目录 一、buffer pool的位置&#xff08;Innodb存储引擎内&#xff09; 二、Buffer Pool是什么&#xff1f; 1、降低磁盘访问的机制 2、Buf…

揭秘阿里巴巴商品详情API:电商数据获取新篇章,业务效率飞跃提升

阿里巴巴平台商品详情API接口技术深度解析 一、概览 在阿里巴巴这个庞大的电商生态中&#xff0c;商品详情API接口&#xff08;item_get&#xff09;扮演着至关重要的角色。通过这一接口&#xff0c;开发者可以轻松地获取商品的详细信息&#xff0c;为选品、数据分析、价格监…

【机器学习算法】KNN鸢尾花种类预测案例和特征预处理。全md文档笔记(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习&#xff0c;伴随浅显易懂的数学知识&#xff0c;让大家掌握机器学习常见算法原理&#xff0c;应用Scikit-learn实现机器学习算法的应用&#xff0…

Spark 离线开发框架设计与实现

一、背景 随着 Spark 以及其社区的不断发展&#xff0c;Spark 本身技术也在不断成熟&#xff0c;Spark 在技术架构和性能上的优势越来越明显&#xff0c;目前大多数公司在大数据处理中都倾向使用 Spark。Spark 支持多种语言的开发&#xff0c;如 Scala、Java、Sql、Python 等。…

读写锁学习笔记

1、数据结构 读锁是共享模式&#xff0c;写锁是独占模式&#xff0c;两个锁也公用一个AQS 两者共用一个state来表示&#xff0c;state前16位表示读锁&#xff0c;后16位表示写锁 读锁操作 通过向右位移16位&#xff0c;然后进行操作 写锁操作 通过和0000 0000 0000 0000 111…

VR全景在文旅景区方面的应用有哪些?

文旅是一个大消费行业&#xff0c;核心是面对C端客户&#xff0c;因此用户的体验非常重要。在这个基础上文旅景区是希望将风景传播给更多人&#xff0c;因此传播和裂变也是文旅行业所需的&#xff0c;而VR全景技术正好可以满足文旅景区所有的价值要素。 VR全景在文旅景区方面的…

2000-2022年上市银行相关指标数据

2000-2022年上市银行相关指标数据 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;附在文件内&#xff0c;见表格名称 3、指标&#xff1a;证券代码、证券简称、上市日期、上市公司(银行)类型、不良贷款余额、不良贷款拨备覆盖率、不良贷款比率、净利差、净息差、净息差…

el-button 选择与非选择按钮批量处理

el-button 选择与非选择按钮批量处理 <el-button v-for"(voyage,i) in data[voyages][nowVoyage]":key"i"class"c-work-bts"type"primary":plain"nowWorkSpace!i"click"chooseWorkSpace(i)"size"small&qu…

判断一个dll/exe是32位还是64位

通过记事本判断&#xff08;可判断C或者C#&#xff09; 64位、将dll用记事本打开&#xff0c;可以看到一堆乱码&#xff0c;但是找到乱码行的第一个PE&#xff0c;如果后面是d?则为64位 32位、将dll用记事本打开&#xff0c;可以看到一堆乱码&#xff0c;但是找到乱码行的第…