IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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语言进阶学习笔记】四、结构体内存对齐、位段

一、结构体内存对齐

分析如下代码:

struct s{
    char a;
    int b;
    char c;
};

两个char类型加上一个int类型一共6个字节?但是事实却是:在这里插入图片描述
这是因为存在结构体内存对齐,指每个变量所占空间的起始处是有规定的,跟对齐数有关。
对齐数:每个变量的对齐数是编译器默认的对齐数与其所占内存大小的较小值。

  1. 首先结构体第一个变量所占内存的起始处我们假设为相对偏移量为0。
  2. 其余变量计算自己的对齐数,将自己所占内存的起始处从对齐数的整数倍处开始存放。
  3. 结构体所占内存总大小为其变量中最大对齐数的整数倍。
  4. 若结构体A的变量中有个是结构体B,那结构体B的对齐数为B内的变量的对齐数的最大值。

对齐数的存在是一种空间换时间的操作,方便了取数据时访问内存节约时间。

但是,为了可以也相对节省空间,可以把占用空间小的变量放在一起,可以节省空间,看如下例子:

struct s1{
    char c1;
    int i;
    char c2;
};

在这里插入图片描述
上述代码结构题s1所占内存为12个字节。那么做如下改进:

struct s2{
    char c1;
    char c2;
    int i;
};

在这里插入图片描述
可见结构题s2所占内存大小为8字节,比s1少了4字节。

二、位段

位段的形式如下:

struct S{
    int _a:2;
    int _b:5;
    int _c:10;
    int _d:30;
};

: n代表前面的变量占多少个bit(不是字节,是比特位)

位段内存分配原则:

  1. 位段的成员可以是int、unsigned int、char等整形家族的类型。
  2. 分配时按照需要4个字节一次分配或者1个字节一次分配。

上面的位段C,因为其为int类型,直接一次分配4个字节,32bit。_a分配两个bit,_b分配5个bit,_c分配10个bit,此时一开始分配的4个字节还剩15个bit不够_d了,因为再分配4个字节,共8个字节。
(至于第一次分配剩下的15bit,_d是用完这15bit再去用新分配的还是直接用新分配的,这个不同的编译器实现不同,C没有明确规定怎么办,故位段存在不少跨平台问题)

相比于结构题,位段可以达到一样的效果,但是更加节省空间

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 11:52:27  更:2021-08-19 11:53:56 
 
开发: 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年12日历 -2024/12/27 5:30:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计