C语言--结构体大小

在这里插入图片描述

基本数据类型占用的字节数分别为:char(1),short(2),int(4),long(4),long long(8),float(4),double(8)。
分析一下下面结构体占用的字节数。

struct A
{
int a;
};
struct B
{
char a;
int b;
};
int main()
{
printf("sizeof(struct A)=%d\n", sizeof(struct A));//测试A的大小
printf("sizeof(struct B)=%d\n", sizeof(struct B));//测试B的大小
return 0;
}

在这里插入图片描述
struct A的大小好理解,int a的大小为4字节。
struct B的大小为什么是8字节,而不是1+4,5字节呢?
出于性能考虑,数据应该尽可能地在自然边界上对齐”。这句话是什么意思呢?看下图,假设地址从100
开始
在这里插入图片描述
在上图的(一)中,a,b内存紧密相连,其内存加起来是5个字节,但是b的地址为101不能被4整除(4是b的
类型大小)。读取b的数据时需要转换,速度较慢。
在上图的(二)中,a,b中间有三个字节的空间不使用,b的地址为104能被4整除,读取b的数据时不需要转
换,速度快。但这时的空间为1+3+4=8字节。
现代计算机的内存都是比较大的,操作系统在设计时都愿意浪费一点点空间来换取更快的速度

对齐规则1

对齐规则1:当前成员所在的地址能整除成员本身的字节大小。
也就是说,char类型成员的地址要能被1整除,short类型成员的地址要能被2整除,int类型成员的地址要
能被4整除,其它数据类型同理。
再练习几个,看看它们的大小是几个字节呢?

在这里插入图片描述
答案分别是8,16,12。

在这里插入图片描述
上图中”+”后面的数字为内存对齐不使用的字节数。
下面这个结构体占用几个字节呢

struct E
{
int a;
char b;
};

它的大小应该是5(4+1)字节,但是实际上它的大小却是8字节,这是为什么呢?
规则:

对齐规则2

对齐规则2:==结构体的总大小能整除单个最大成员的字节数。 ==
上面的例子, struct E占用字节数5不能整除最大成员a的字节数4(5不能整除4),所以struct E占用的字
节数应该对齐为4的倍数,8字节。
对齐规则2又是怎么来的呢?为什么有这样的规定?请看下面的分析。

struct E
{
int a;
char b;
};
int main()
{
struct E arr[2]; //结构体数组
return 0;
}

结构体不仅可以定义单个变量,也可以定义数组,如上struct E arr[2];那么arr数组的内存如何分布呢?
在这里插入图片描述
如上图(一)所示,如果struct E占用5字节,数组arr[0]成员a,b的地址都可以被本身大小整除,但是
arr[1]。a的地址为105不能被4整除。
如上图(二)所示,如果struct E占用8节字,那么arr[0],arr[1]的成员地址都可以被本身大小整除。


本篇完!

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

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

相关文章

Nginx小册(博客笔记迁移)

nginx基础 1.常用命令 nginx -v #查看版本 ps -ef | grep nginx #输出linux进程、 nginx #启动nginx进程 nginx -s reload #重载配置 nginx -s stop # 停止进程 nginx -t # 检查是否有语法错误,以及配置文件地址2.nginx的配置文件 # 用户组的设置 windows上不生…

Java面试题:什么是Java的集合框架?详细举例说明常用的集合,及其应用场景

Java的集合框架(Java Collections Framework)是Java编程语言中提供的一套用于表示和操作集合的统一架构。它包含了一系列接口、类和算法,用于创建和操作集合对象,如列表、集合、映射等。这些集合对象在Java程序中广泛用于存储和组…

支持0V充电700MA线性锂电池充电芯片-YB4055SL

支持0V充电700MA线性锂电池充电芯片 描述: YB4055SL是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。其SOT 封装与较少的外部元件数目使得YB4055SL成为便携式应用的理想选择YB4055SL可以适合 USB 电源和适配器电源工作。 由于采用了内部PMOSFET架构&am…

微信小程序 uniapp+vue.js医疗在线问诊挂号系统4oy17

预约挂号系统的逐渐发展,进一步方便了广大用户,使其可以更方便、快捷地预约挂号,并且也有效地防止号贩子“倒号”,使用户预约挂号更公平,然而现有预约挂号系统或多或少有所欠缺 小程序前端框架:uniapp 小程…

AndroidAutomotive模块介绍(三)CarService服务

前言 上一篇文档总结 Android Automotive 框架的 APP 和 API 部分内容,本篇文档将会继续根据 Android Automotive 框架结构,总结 Framework 层 CarService 服务的内容。 本文档对 Android Automotive Framework 层服务将会按照如下顺序展开描述&#x…

windows搭建ftp服务器

安装iis 点击安装即可,搜索iis打开 创建ftp服务器 身份验证:只勾选匿名,不勾选基本,网上的很多教程会添加基本,导致的问题会出现浏览提需要输入账号密码的情况,这里为了方便大家更直观的感受FTP建立的过程&#xff0…

计算机网络技术-双绞线的制作与测试方法

目录 制作方法测试方法 待续、更新中 制作方法 (1)剥线 (2)去除外表皮 (3)分开双绞线 (4)拆分线对 (5)排列线序 (6)剪线 (7)安装RJ-4…

物理服务器与云服务器的租用对比

​ 物理服务器:每个基于 Web 的应用程序都依赖于一个服务器,该服务器提供网络中的数据存储,并可根据请求提供给客户端。例如,用户使用浏览器访问 Web 应用程序。服务器可确保托管客户端可以使用该硬件组件。与其他托管可能性相比&…

MySQL数据库max_allowed_packet参数

如上图所示的报错,我在提交接口的时候出现了这个错误: MySqlConnector.MySqlException:Error submitting 4MB packet;ensure max_allowed_packet is greater than 4MB.在MySQL数据库中,有一个参数叫max_allowed_packet,这个参数会…

nacos服务器挂了之后springboot/springcloud服务会挂吗?不会挂(顺便深入源码分析nacos配置中心客户端核心功能实现)

文章目录 nacos挂了之后服务会挂吗?不会挂(深入源码分析)展开nacos客户端源码找本地缓存配置相关文件客户端内存缓存客户端健康状态获取配置的实现 nacos挂了之后服务会挂吗?不会挂(深入源码分析) 展开nac…

云HIS医院管理系统源码,SaaS模式+Java云HIS系统融合B/S版开箱即用

云HIS医院管理系统源码,SaaS模式Java云HIS系统融合B/S版开箱即用 一、云HIS系统简介 SaaS模式Java版云HIS系统,在公立二甲医院应用三年,经过多年持续优化和打磨,系统运行稳定、功能齐全,界面布局合理、操作简便。 云H…

软件供应链安全:寻找最薄弱的环节

在当今的数字时代,软件占据主导地位,成为全球组织业务和创新的支柱。它是差异化、项目效率、成本降低和竞争力背后的驱动力。软件决定了企业如何运营、管理与客户、员工和合作伙伴的关系,以及充分利用他们的数据。 挑战在于,当今…

Java技术学习|SpringBoot面试篇

学习材料声明 黑马程序员黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关 经过了基础知识后端开发前端开发,终于到了面试篇。 前置知识 1.ApplicationContextInitializer 首先,SpringBoot…

CentOS7 boa服务器的搭建和配置

环境是CentOS7,但方法不局限于此版系统,应该是通用的。 具体步骤如下: 1. 下载boa源码 下载地址: Boa Webserver 下载后,进入压缩包所在目录,进行解压: tar xzf boa-0.94.13.tar.gz 2. 安装需要的工具b…

【go-zero】go-zero 整合MQTT协议 | 实现对MQTT的操作

一、go-zero标准项目配置 完成下面三个步骤就可以直接在svcCtx中使用MQTT 我们使用官方的MQTT库:https://github.com/eclipse/paho.mqtt.golang 1、 设置 YAML 1.1、配置如下: 除了Broker、Port、User、Pass、Ca 其余都为可选项 Mqtt:Broker: mqtt3.xxx.com# Port: 28883…

算法刷题记录 Day43

算法刷题记录 Day43 Date: 2024.04.10 lc 188. 买卖股票的最佳时机IV // 拓展一下lc.123 的思路即可. class Solution { public:int maxProfit(int k, vector<int>& prices) {int n prices.size();//dp[i] 表示 第i天时完成不同笔交易下的各状态。[buy_1, sell_1…

Nginx转发请求错误

说明&#xff1a;记录一次使用Nginx转发请求的错误&#xff1b; 场景 公司内部有两台服务器都跑了后端项目&#xff0c;在使用Nginx做请求分发时&#xff0c;我发现其中有台服务器一直没有处理请求&#xff08;没打印相关的日志信息&#xff09;&#xff0c;于是我修改了下Ng…

2024年第十七届“认证杯”数学中国数学建模网络挑战赛A题思路

A题 保暖纤维的保暖能力 冬装最重要的作用是保暖,也就是阻挡温暖的人体与寒冷环境之间的热量传递。人们在不同款式的棉衣中会填充保暖材料,从古已有之的棉花,羽绒到近年来各种各样的人造纤维。不同的保暖纤维具有不同的保暖性能,比如人们以往的经验表明,高品质的羽绒具有…

僵尸进程和孤儿进程

目录 引言僵尸进程僵尸进程的状态僵尸进程周边知识 孤儿进程孤儿进程的状态 进程中的其他状态①.R---表示进程运行状态。②.S---表示进程的休眠状态。(进程什么都没做)③T 和 t 进程的运行、阻塞和挂起运行阻塞挂起状态&#xff1a; 引言 今天我们来将僵尸进程和孤儿进程以及其…

国家留学基金委(CSC)2024-2025年度中加学者交换项目开始申报

4月3日&#xff0c;国家留学基金委&#xff08;CSC&#xff09;发布了2024-2025年度中加学者交换项目遴选通知。根据通知精神&#xff0c;选派规模&#xff1a;100人月&#xff0c;留学及资助期限&#xff1a;4-12个月&#xff0c;网上报名截止日期至2024年6月30日。以下知识人…