iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++结构体字节对齐示例
  • 485
分享到

C++结构体字节对齐示例

2024-04-02 19:04:59 485人浏览 安东尼
摘要

目录示例代码不想让结构体自动对齐怎么办示例代码 #include <iOStream> //输入输出流 using namespace std; #include

示例代码

#include <iOStream>    //输入输出流
using namespace std;
#include <vector>      //容器
struct MyStruct
{
   unsigned char start1;
   unsigned char start2;
   unsigned char test1[7];
};
struct header
{
   unsigned char by; //1字节
   unsigned int dw; //4字节
   int flag; //4字节
};
typedef unsigned char UCHAR;    //定义无符号字符变量的别名
typedef unsigned int UINT;      //定义无符号整型变量的别名
const int PREAMBLE_LENGTH = 7;   //定义整型常量,前导码占7个字节
const int START_LENGTH = 1;      //帧前定界符占1个字节
const int DESADD_LENGTH = 6;     //目的地址
const int SOURCEADD_LENGTH = 6;  //源地址
const int TYPE_LENGTH = 2;       //类型字段
const int FCS_LENGTH = 4;        //帧校验地址
class MyFrame1
{
public:
   UCHAR preamble[PREAMBLE_LENGTH];     //前导码
   UCHAR start;                         //帧前定界符,标明下一个字节为目的Mac字段
   UCHAR dest_add[DESADD_LENGTH];       //指明帧的目的地址
   UCHAR source_add[SOURCEADD_LENGTH];  //指明帧的源地址
   UCHAR type[TYPE_LENGTH];             //帧中数据的协议类型
   vector <UCHAR> data;                  //vector <UCHAR>占16字节    定义数据的容器存储数据字段
   UCHAR fcs[FCS_LENGTH];               //帧校验序列
};
int main()
{
   MyStruct struct1;
   cout << sizeof(struct1)<<endl;
   header str1;
   cout << sizeof(str1) << endl;
   MyFrame1 fram1;
   cout << sizeof(fram1) << endl;
    return 0;
}

以上代码我定义了2个结构体,1个类,类的本质也是结构体。因为运行环境是32位,所以在用sizeof计算结构体或者类的大小时,可能会出现字节对齐的现象,就是sizeof的结果是4的整数倍,从下图中可以看到struct1结构体变量没有发生字节对齐,而str1结构体变量和fram1类对象的统计大小时,均发生了字节对齐现象(str1结构体变量定义了9个字节,对齐到12字节,而MyFrame类原本占42字节,对齐到44字节)

不想让结构体自动对齐怎么办

在头文件当中添加#pragma pack(1)即可

#include <iostream>    //输入输出流
using namespace std;
#include <vector>      //容器
#pragma pack(1)         #按1个字节对齐,这样相当于就没有内存对齐

添加之后结果

这样就不会自动字节对齐了

以上就是c++结构体字节对齐示例的详细内容,更多关于C++结构体字节对齐的资料请关注编程网其它相关文章!

--结束END--

本文标题: C++结构体字节对齐示例

本文链接: https://www.lsjlt.com/news/152366.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++结构体字节对齐示例
    目录示例代码不想让结构体自动对齐怎么办示例代码 #include <iostream> //输入输出流 using namespace std; #include ...
    99+
    2024-04-02
  • C++结构体字节对齐和共用体大小的示例分析
    这篇文章主要介绍了C++结构体字节对齐和共用体大小的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、结构体内存对齐结构体内存对齐在笔试和面试中经常被问到,所以做个总...
    99+
    2023-06-25
  • C++结构体字节对齐和共用体大小
    目录1、结构体内存对齐2、共用体的内存大小3、枚举的大小1、结构体内存对齐 结构体内存对齐在笔试和面试中经常被问到,所以做个总结 通过代码验证不同结构体的内存大小: #inclu...
    99+
    2024-04-02
  • c语言结构体字节对齐的实现方法
    目录1.什么是字节对齐 2.为什么要有字节对齐 3.手动设置对齐 4.结构体比较方法 1.什么是字节对齐 在c语言的结构体里面一般会按照某种规则去进行字节对齐。 我们先看一段代码...
    99+
    2024-04-02
  • C语言结构体字节对齐的实现深入分析
    目录前言一、什么是字节对齐二、结构体字节对齐三、#pragma pack()的使用总结前言 本教程可能会用到一点汇编的知识,看不懂没关系,知道是那个意思就行了。使用的工具是vs201...
    99+
    2022-11-13
    C语言结构体字节对齐 C语言字节对齐
  • C语言结构体内存对齐详解
    目录实例一:分析:存储结构图如下实例二: 分析:存储结构如下实例三:  分析:存储结构如下 实例四:分析:存储结构图如下总结1、结构体内存对齐...
    99+
    2024-04-02
  • C语言中结构体与内存对齐实例解析
    1.结构体类型 C语言中的2种类型:原生类型和自定义类型,结构体类型是一种自定义类型。 2.结构体使用时先定义结构体类型再用类型定义变量 -> 结构体定义时需要先定义结构体类型...
    99+
    2024-04-02
  • C语言中结构体struct怎么对齐
    这篇文章主要介绍“C语言中结构体struct怎么对齐”,在日常操作中,相信很多人在C语言中结构体struct怎么对齐问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中结构...
    99+
    2024-04-02
  • C语言深入回顾讲解结构体对齐
    目录结构体对齐问题结构体嵌套结构体强制内存对齐拓展求结构体成员的偏移量结构体对齐问题 1、知识点的引入: struct data1 { char a;//1B int...
    99+
    2024-04-02
  • C语言中结构体怎么与内存对齐
    本篇内容介绍了“C语言中结构体怎么与内存对齐”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.结构体类型C语言中的2种类型:原生类型和自定义...
    99+
    2023-06-20
  • C语言详细分析结构体的内存对齐
    目录一.结构体二.结构体内存对齐1.非嵌套结构体的大小2.含嵌套结构体的大小三.为什么要内存对齐1.平台原因(移植原因)2.性能原因一.结构体 结构体 (struct)是一种数据结构...
    99+
    2024-04-02
  • C语言中结构体与内存对齐的方法
    这篇文章主要介绍了C语言中结构体与内存对齐的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中结构体与内存对齐的方法文章都会有所收获,下面我们一起来看看吧。1.结构体类...
    99+
    2024-04-02
  • 结构体对齐的规则详解及C++代码验证
    目录基本概念结构体对齐的规则程序验证基本概念 CPU一次能读取多少个字节的数据主要是看数据总线是多少位的,16位CPU一次能读取2个字节,32位CPU一次能读取4个字节,64位CPU...
    99+
    2024-04-02
  • C语言结构体中内存对齐的问题理解
    目录前言思考结构体在内存中开辟空间时内存对齐的规则为什么存在内存对齐1.平台的原因2.性能的原因前言 学C的同学应该知道~ 想精通C语言就不得不面对—指针与内存 续上次指...
    99+
    2024-04-02
  • C语言详解热门考点结构体内存对齐
    目录一、为什么存在内存对齐二、如何计算?(考点)三、手撕代码一、为什么存在内存对齐         大...
    99+
    2024-04-02
  • C语言中结构体的内存对齐规则讲解
    目录1.结构体的内存对齐规则2.例子3.为什么存在内存对齐4.如何修改默认对齐数1.结构体的内存对齐规则 1.第一个成员在与结构体变量偏移量为0的地址处。 2.其他成员变量都放在对齐...
    99+
    2024-04-02
  • Go编译器是否会进行字节填充以确保结构体字段的地址对齐?
    ...
    99+
    2024-04-02
  • C语言结构体嵌套与对齐超详细讲解
    目录嵌套结构体结构体内存对齐32位的操作系统64位的操作系统嵌套结构体 格式:typedef struct 结构体名 {struct 结构体名1 结构体变量名1;struct 结构体...
    99+
    2022-12-26
    C语言结构体嵌套 C语言结构体对齐 C语言结构体嵌套与对齐
  • C语言中结构体、联合体的成员内存对齐情况
    前言 最近项目进行中,遇到一个小问题,在数据协议传输过程中,我为了方便解析,就定义了一个结构体,在数据的指针传入函数的时候,我用定义好的结构体进行强制转化,没想到一直解析失败,调试很...
    99+
    2024-04-02
  • C语言程序中结构体的内存对齐详解
    目录一、为什么存在内存对齐二、结构体的内存对齐四规则三、举例一、为什么存在内存对齐 1.平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某...
    99+
    2022-11-13
    C语言结构体内存对齐 C语言 内存对齐 C语言 结构体
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作