结构体的内存对齐(计算题常考点)

2024-01-22 11:20

本文主要是介绍结构体的内存对齐(计算题常考点),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

许久不见我考完试回来啦,让我们接着将结构体进行到底!

目录

结构体对齐的意义:

结构体对齐的实现:

对齐规则:

训练:

好到这里误区来了:

总结:

往期回顾:

下期预告:结构体实现链表


结构体对齐的意义:

结构体的内存存储形式并不是按照普通形式的直线形式的存储,为了达到快速访问的效果,计算机在对结构体进行存储时会浪费掉一些内存空间来满足数据的对齐。


结构体对齐的实现:


对齐规则:

  1. 结构体数据储存位置从0开始,对之后的数据类型储存要进行对齐(对齐是以字节为单位)
  2.  成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
  3.  对齐数 ==编译器默认的⼀个对齐数与该成员变量所占内存(以字节为单位)大小的较小值(例如:int 类型的大小为4个字节,VS2022默认的对齐数是8,则int 的对齐数为 4)
  4. 结构体的总大小(不是序号)为最大对齐数的整数倍

训练:

知到了这些,就可以对结构体的内存大小进行计算了:
我们来计算两个练手:

struct {   char a;   short b;   char c; }S1;

struct {  char  a;  char  b;  short c; }S2;

S1 的计算方式:

好到这里误区来了:

注意:这里我们此时的内存大小为:5个字节,需要对齐为2的整数倍,所以最终对齐后内存为6个字节。


总结:

为了保险,计算时先画一个内存序号表,一个序号表示一个字节,从序号为0开始将数据放入。
最后不要忘了总内存内存对齐。

那么S2的内存大小为多少就由你自己来计算吧!!


往期回顾:

结构体指针icon-default.png?t=N7T8http://t.csdnimg.cn/FMfxa同时:

S2的内存大小为:4个字节!!


下期预告:结构体实现链表

这篇关于结构体的内存对齐(计算题常考点)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/632800

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(