首页 > 编程语言 >C/C++结构体对齐测试

C/C++结构体对齐测试

时间:2024-06-04 10:00:37浏览次数:28  
标签:struct int double C++ char pragma 测试 对齐





#include <stddef.h>
#include <iostream>
struct s1{    
  int a;    
  int b;
};

#pragma pack(8)
struct s2{    
  char c;    
  int a;    
  double b;
};

struct s3 {    
  char b[10];    
  double a;
};

#pragma unpackstruct s4 {    
  char c;    
  int a;    
  double b;
};

#pragma pack(1)
struct SSS{       /* 13 bytes */    
  char c;    int b;    
  double a;};

#pragma unpack            
struct foo12 {           
  /* 子结构体要求父结构体适用相同的对齐大小  */    
  struct foo12_inner {        
    char *p; /* 8 bytes */        
    int x; /* 4 bytes */        
    char pad[4]; /* 4 bytes */    
  } inner;    
  char c; /* 1 byte*/    
  char pad[7]; /* 7 bytes */
 };/* 结构体的内存对齐,变量的起始地址偏移为 n * min(sizeof(type), pragma pack size) */

union u1 {    
  char a[14];    
  int b;
};

union u2 {    
  char a[17];    
  double b;
};
/* union 的对齐简直不懂 ??   union 同时间只能有一个部分被使用, 因此总的空间要能够提供给每个部分,同时总的空间要与最大的空间对齐 */

int main() {    
  std::cout << "sizeof s1 " << sizeof(s1) << std::endl              
    << "sizeof s2 " << sizeof(s2) << std::endl              
    << "sizeof s3 " << sizeof(s3) << std::endl              
    << "sizeof s4 " << sizeof(s4) << std::endl              
    << "sizeof u1 " << sizeof(u1) << std::endl                     
    << "sizeof u2 " << sizeof(u2) << std::endl                                            
    << std::endl;    
    return 0;
}
 
sizeof s1 8
sizeof s2 16
sizeof s3 24
sizeof s4 16
sizeof u1 16
sizeof u2 24
  

 

 

 

标签:struct,int,double,C++,char,pragma,测试,对齐
From: https://www.cnblogs.com/bymzy/p/18230195

相关文章

  • allure的suites(测试套)中未显示返回值参数,显示No information about test execution is
    转自大佬:https://blog.csdn.net/sbdxmnz/article/details/137016423 ExecutionNoinformationabouttestexecutionisavailable.  解决方法:添加代码,因为pytest输出文本形式测试报告时未存储响应内容#将接口响应的文本内容附加到Allure报告中allure.attach(接口响......
  • 小猴编程周赛C++ | 字符串
    学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!附上汇总贴:小猴编程C++|汇总-CSDN博客【题目描述】小猴最近学习了字符串,为了加强对字符串的理解,猴博士特意给小猴安排了一道编程题:给定一个字符串s,保证s中只包含大写字母(AZ......
  • 小猴编程周赛C++ | 六面世界
    学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!附上汇总贴:小猴编程C++|汇总-CSDN博客【题目描述】六面世界的地图由六边形格子组成,地图一共n行,奇数行有m格,偶数行有m-1格。下图是一个n=5,m=5的地图。小明想从起点S走到终点......
  • 《信息学奥赛一本通 编程启蒙C++版》3126-3130(5题)
    3126:练21.3 神奇装置信息学奥赛一本通-编程启蒙(C++版)在线评测系统练21.3神奇装置信息学奥赛一本通-编程启蒙(C++版)在线评测系统3126:练21.3神奇装置_哔哩哔哩_bilibili#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta,b,c,d; cin>>a>>b>>c......
  • 《信息学奥赛一本通 编程启蒙C++版》3001-3280
    《信息学奥赛一本通编程启蒙C++版》3001-3005(5题)《信息学奥赛一本通编程启蒙C++版》3001-3005(5题)-CSDN博客《信息学奥赛一本通编程启蒙C++版》3006-3010(5题)《信息学奥赛一本通编程启蒙C++版》3006-3010(5题)-CSDN博客《信息学奥赛一本通编程启蒙C++版》3011-3015......
  • C/C++ for 语句的要点与注意事项
    C/C++中的 for 语句是一种常用的循环结构,用于重复执行一段代码,直到满足某个条件为止。以下是 for 语句的要点与注意事项:要点:基本语法:for 语句的基本语法为 for(initialization;condition;update){body_of_loop}。initialization:初始化循环控制变量。condition......
  • C++的vector使用优化
    我们在上一章说了如何使用这个vector动态数组,这章我们说说如何更好的使用它以及它是如何工作的。当你创建一个vector,然后使用push_back添加元素,当当前的vector的内存不够时,会从内存中的旧位置复制到内存中的新位置,然后删除删除旧位置的内存,也就是说当我push_back,vector容量不够......
  • 【C++初阶学习】第十二弹——stack和queue的介绍和使用
    C语言栈:数据结构——栈(C语言版)-CSDN博客C语言队列:数据结构——队列(C语言版)-CSDN博客前言:在之前学习C语言的时候,我们已经学习过栈与队列,并学习过如何使用C语言来实现栈与队列,今天,我们用C++来学习这些知识,让我们探索一下其中的新的知识点目录一、stack(栈)1.栈的概述......
  • C++代码实现一个简易http服务端,返回给客户端一张图片
    注意事项sprintf读取字符串时,遇到\0会结束,所以不能用sprintf来读取*pictureBuffervoid*memcpy(void*str1,constvoid*str2,size_tn),str2会覆盖str1里的内容代码#include<func.h>charpictureBuffer[150*1024];charbuffer[200*1024];intmain(){in......
  • C++ tracy性能分析
    #defineTRACY_FIBERS#include"tracy/Tracy.hpp"#include"tracy/TracyC.h"constchar*fiber="job1";TracyCZoneCtxzone;inttest(){std::threadt1([]{TracyFiberEnter(fiber);TracyCZone(ctx,1);......