结构体的使用与内存计算/对齐数计算

简介: (1)平台原因:不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常(2)性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

目录

前言:


结构体的声明


1.例如定义一个学生类型


2. 可以在大括号后面定义结构体变量(s1,s2,s3)---全局变量


3.struct前加typedef时


4.结构体的自引用


5.结构体嵌套初始化


结构体的内存对齐---计算结构体的内存大小


1.为什么要内存对齐?


2.如何计算结构体所占内存大小?


3.什么是对齐数


4.计算结构体所占内存实例讲解


计算如下:(用语言可能难理解 我这里画图)


前言:

结构体实质上就是一种类型 类似与int char等,但是是自己创建的一种类型

结构体的声明

1.例如定义一个学生类型

44043021a62b6042a1fb417173c4ddd2_b262de0e0c8840fc974c9aaa47829939.png


2. 可以在大括号后面定义结构体变量(s1,s2,s3)---全局变量

344f896b691f17ba033ca9e06ac82c18_ef02ad823a0f432aa58b1cf7db8cd78c.png

3.struct前加typedef时

可以用括号后面所写的代替struct Stu :例如:s1与s2的定义

24321a7a53bb5170123e2bf46c9c75da_719c2f28754f4563a6428031b9816836.png

4.结构体的自引用

注意箭头

8b000691c3f9a15f74c6fd83de917b03_d5d42782c20e4b979fc73e544339d0d8.png



5.结构体嵌套初始化

63e7e98d545d76d8051cbbfa232c9642_3f34ffa5365949dfa303a22ab1354b1a.png

结构体的内存对齐---计算结构体的内存大小

1.为什么要内存对齐?

(1)平台原因:

不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特

定类型的数据,否则抛出硬件异常

(2)性能原因:

数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。


总结:结构体的内存对齐是拿空间来换取时间的做法


2.如何计算结构体所占内存大小?

1. 第一个成员在与结构体变量偏移量为0的地址处。

2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。

   对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。

   VS中默认的值为8

3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。

4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整

体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。


3.什么是对齐数

例如一个int类型的对齐数为4 double的对齐数位8 char的对齐数位1 但是在结构体储存的时候会选择类型对齐数与编译器的默认对齐数中小的:

fe4d2326ecefa5c41b350040fa9d838d_ee4cb8e255d8499ab762387e1da5e577.png

4.计算结构体所占内存实例讲解

计算下面3个结构体所占内存大小

de350f30586b716991af7477c95b22c1_3b98e50b17a04294a8477f6c939d5068.png

计算如下:(用语言可能难理解 我这里画图)

9f8df45f021763e0b7a8cbcc404d56aa_146d068f19ae4b35a1b2580b0ffb8cec.png

1bc916fd579c15472722c630d13354f3_d3b1f05e73484e37b0417c3afad898df.png



大家懂了吧!!!


目录
相关文章
|
4月前
|
存储 安全 数据库
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
阿里云服务器ECS计算型、通用型、内存型规格族属于独享型云服务器,在高负载不会出现计算资源争夺现象,因为每一个vCPU都对应一个Intel ® Xeon ®处理器核心的超线程,具有性能稳定且资源独享的特点。本文为大家整理汇总了阿里云服务器ECS计算型、通用型、内存型主要实例规格族具体实例规格有哪些,各个实例规格的性能特点和主要适用场景。
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
|
2天前
|
存储 缓存 Java
结构体和类在内存管理方面的差异对程序性能有何影响?
【10月更文挑战第30天】结构体和类在内存管理方面的差异对程序性能有着重要的影响。在实际编程中,需要根据具体的应用场景和性能要求,合理地选择使用结构体或类,以优化程序的性能和内存使用效率。
|
2天前
|
存储 缓存 算法
结构体和类在内存管理方面有哪些具体差异?
【10月更文挑战第30天】结构体和类在内存管理方面的差异决定了它们在不同的应用场景下各有优劣。在实际编程中,需要根据具体的需求和性能要求来合理选择使用结构体还是类。
|
5月前
|
弹性计算 安全 前端开发
阿里云服务器ECS通用型、计算型和内存型详细介绍和性能参数表
阿里云ECS实例有计算型(c)、通用型(g)和内存型(r)三种,主要区别在于CPU和内存比例。计算型CPU内存比1:2,如2核4G;通用型为1:4,如2核8G;内存型为1:8,如2核16G。随着技术迭代,有第五代至第八代产品,如c7、g5、r8a等。每代实例在CPU型号和主频上相同,但性能有所提升。实例性能参数包括网络带宽、收发包能力、连接数等。具体应用场景如计算型适合高网络包收发、通用型适合企业级应用,内存型适合内存数据库等。详细信息可参阅阿里云ECS页面。
315 0
|
4月前
|
存储 缓存 安全
阿里云服务器实例规格选择参考:经济型、通用算力型、计算型、通用型、内存型区别
当我们在通过阿里云的各种活动选择云服务器实例规格的时候会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,这会是因为不同实例规格的由于采用的处理器不同,底层架构也有所不同(例如X86 计算架构与Arm 计算架构),因此不同实例的云服务器其性能与适用场景是有所不同。目前阿里云的活动中,主要的实例规格可分为经济型、通用算力型、计算型、通用型、内存型,对于很多初次接触阿里云服务器的用户来说,了解他们之间的差别就是比较重要的了,下面小编来为大家简单介绍下它们之间的区别。
阿里云服务器实例规格选择参考:经济型、通用算力型、计算型、通用型、内存型区别
|
3月前
|
存储 Go
Go 内存分配:结构体中的优化技巧
Go 内存分配:结构体中的优化技巧
|
5月前
|
编译器 测试技术 C语言
【C语言】:自定义类型:结构体的使用及其内存对齐
【C语言】:自定义类型:结构体的使用及其内存对齐
66 7
|
5月前
|
弹性计算 安全 前端开发
云服务器ECS通用型、计算型和内存型区别以及详细介绍
阿里云ECS实例有计算型(c)、通用型(g)和内存型(r)系列,区别在于CPU内存比。计算型1:2,如2核4G;通用型1:4,如2核8G;内存型1:8,如2核16G。实例有第五代至第八代,如c7、g5、r8a等,新一代通常使用更先进的处理器。性能参数如CPU主频、IOPS和网络带宽随实例规格变化。实例适合场景包括高网络包收发、数据库、计算密集型任务等。
|
5月前
|
存储 编译器 C语言
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)一
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)一
56 2
|
5月前
|
编译器 Linux C语言
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)二
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)二
50 1