| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 自义定类型详解——十分钟杀穿C语言进阶 -> 正文阅读 |
|
[C++知识库]自义定类型详解——十分钟杀穿C语言进阶 |
传统艺能😎小编是双非本科大一菜鸟不赘述,欢迎大佬指点江山(QQ:1319365055) 过渡区🤣现在是北京时间 15:00,终于有点过年的气息了,小区灯笼和彩灯终于给盘上了,一拉开窗帘子属实挺喜庆,心情到位开始盘博客,不然惰性又要起来了。 正片开始👀结构大小👏我们先随便给出一个结构体,为了计算他的大小,我给出完整的打印方案:
好了,按道理来说我计算一个结构体大小就看他的各个成员需要消耗多大的空间, num 结构体中三个成员分别是 char ,int ,char 类型,对应 1 , 4, 1 字节大小,这么说来只需要 6 字节空间就ok了;但是——我们看看打印结果: offsetof 👏嘛是 offsetof,本质上他是个宏,C 语言库宏 offsetof 会生成一个类型为 size_t 的整型常量(size_t是标准C库中定义的,在64位系统中为long long unsigned int),它是一个结构成员相对于结构开头的字节偏移量。声明为:
其中结构体成员是由 member-designator 给定的,结构体的名称是在 type 中给定的,需要<stddef.h>头文件支持。 我们就来康康各个成员的偏移量究竟是多少
结果如下:
我们搞个图来具象一下这个过程(手残ppt) 那么新的问题又来了,为什么会有空白部分(偏移量为1,2,3和未画出的12)?空白部分又干什么去了? 那我们就要明白结构体的对齐规则。 结构体对齐规则👏1. 结构体第一个成员存在于结构体偏移量为 0 的地址处,也就是同起点开始。 解释: 第一条很好理解吧,我们第二条就拿成员 n 来说,n 的大小为 4编译器默认对齐数为 8,取 4,8 中的较小值 4 作为对齐数。 第三条的最大对齐数如何理解呢?其实就是所有成员中对齐数最大的那个,三个成员对齐数分别是 1,4,1 ,取最大值就是 4,要是 4 的整数倍才行,我们刚好取完最后一个成员 cc 对齐数是8,整个空间 0-8 大小就是 9,9不是4 的倍数我们扔掉,然后继续浪费掉三个空间直到来到我们的 12,满足条件跳出。 举个栗子:
我们按照规则画出他的内存分布: 存在原因👏==So,为什么结构体会存在这种对齐机制呢 ?==两个方面:
如果说在结构对齐方式不合适的时候,我们能自己更改默认对齐数来提高性能吗? 当然可以!
这个宏可以取消默认对齐数,括号里 num 设置成自己满意的对齐数,最后再用这个宏取消自己的设置即可。 今天就到这里吧,摸了家人们。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:40:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |