【C/C++】位段

零.导言

位段,对初学者来说是一个相对陌生的概念。今天,我将简单的介绍位段的概念。

先说结论:位段和结构体是类似的,并且在空间储存上战友,但同时存在难以跨平台的弊端。


一.位段的声明

我们来简单看一下结构体和位段的区别:

cpp 复制代码
//这是结构体

struct SeqList
{
    int arr*;
    int size;
    int capacity;
};

以上是结构体。

cpp 复制代码
//位段

struct A
{
    int _a:2;
    int _b:4;
    int _c:8;
    int _d:12;
};

以上是位段。

可以看出,结构体和位段是极为相似的,其中一个区别在于位段在变量名后加了一个冒号和一个数字,用于确定开辟的空间大小。


二.位段的内存分配

关于位段的内存分配,有几点要特别注意,和结构体不同:

  1. 位段的成员只能是 int, unsigned int,signed int,char等类型。
  2. 位段的空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟的
  3. 位段涉及很多不稳定因素,难以跨平台。

从此可以看出:位段可以精细的控制变量所用空间大小,有占用空间小的优点。


三.位段的跨平台问题

  1. int 位段被当成有符号数还是无符号数是不确定的。
  2. 位段中最大位的数目不能确定。(比如16位机器最大位是16,32位机器最大位是32)
  3. 位段中的成员在内存中从左向右分配,还是从右向左分配,标准尚未定义。
  4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的。

综上所述:当所写程序涉及跨平台时,还是推荐使用位段而非结构体。


四.相关链接

【C/C++】结构体的定义-CSDN博客


相关推荐
不会就选b2 分钟前
算法日常・每日刷题--<队列,宽搜>4
算法
Augustzero7 分钟前
为什么高性能调度器都在“偷任务”?从无锁队列看懂工作窃取
c++·后端
(Charon)15 分钟前
【C++】线程安全队列(三):MPSC无锁队列、atomic与链表节点实现
c++·安全·链表
(Charon)15 分钟前
【C++】:使用 mutex + deque 实现一个简单的 LockedQueue
开发语言·c++
码字的特恩15 分钟前
微软确认暂不为 Windows 11 加入透明效果自定义功能,建议用户使用第三方工具
人工智能·windows·算法·microsoft·计算机·大模型·编程
星轨初途24 分钟前
LeetCode 热题 100——day10 和为 K 的子数组
开发语言·c++·算法·leetcode
数模竞赛Paid answer26 分钟前
2021年深圳杯数学建模C题配电网可靠性和故障软自愈研究解题全过程论文及程序
算法·数学建模·数据分析·深圳杯
有点。31 分钟前
C++广度优先搜索(二)-练习题
c++·算法·宽度优先
Q741_14739 分钟前
TcpDump 使用笔记
网络·c++·笔记·测试工具·tcpdump
程序猿编码42 分钟前
不用PyTorch,不用CUDA,我用C++手写了一个能跑GPT和Whisper的推理库
c++·pytorch·gpt·大模型·whisper