结构体内存对齐经典题

简介: 如果对结构体内存对齐还不是很理解的话,做题之前可以看一看喔,看完轻轻松松就可以做出了啦。如果懂的话,请做题吧!

本篇收录三道有关内存对齐的经典练习题,可供初学者练习刷题,如果想知道更多的内存对齐相关知识可以进入该作者的《结构体内存对齐与位段》了解


《结构体内存对齐与位段》


如果对结构体内存对齐还不是很理解的话,做题之前可以看一看喔,看完轻轻松松就可以做出了啦。如果懂的话,请做题吧!


第一题:


在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是(


struct A
{
 int a;
 short b;
 int c;
 char d;
};
struct B
{
 int a;
 short b;
 char c;
 int d;
};
int main()
{
  printf("%d\n", sizeof(struct A));
  printf("%d\n", sizeof(struct B));
  return 0;
}


A.16,16

B.13,12

C.16,12

D.11,16


结果:


f2dc5f71ccdf40a1b9b06fb82f09d095.png


ba4ac7d997404254b3eb296dfc297599.png


416c4561778d4658804b93a144fd6f2c.png


第二题


下面代码的结果是:(


#pragma pack(4)/*编译选项,表示4字节对齐 平台:VS2013。语言:C语言*/
int main(int argc, char* argv[])
{
  struct tagTest1
  {
    short a;
    char d; 
    long b;   
    long c;   
  };
  struct tagTest2
  {
    long b;   
    short c;
    char d;
    long a;   
  };
  struct tagTest3
  {
    short c;
    long b;
    char d;   
    long a;   
  };
  struct tagTest1 stT1;
  struct tagTest2 stT2;
  struct tagTest3 stT3;
  printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));
  return 0;
}
#pragma pack()


A.12 12 16

B.11 11 11

C.12 11 16

D.11 11 16


结果:


0a3f0170c7d14a489e8aa102b81ab7a9.png


解析:


0553394f19c64cedaa49f28940eb6802.png

2d61516efcc24895a3bd21746d160992.png


22bd286b606841b1812fa6000d76cef6.png


第三题:


在VS2013下,默认对齐数为8字节,这个结构体所占的空间大小是( )字节


typedef struct{
  int a;
  char b;
  short c;
  short d;
}AA_t;


A.16

B.9

C.12

D.8


结果:


02407bf36d6441f4b6a8f5338e1beacf.png


解析:


7a94a8df81f34403be510abe838a4e59.png

相关文章
|
SQL 安全 数据挖掘
课7-隐语SCQL的架构详细拆解
SCQL是安全协作查询语言,针对多⽅隐私保护的数据分析。它在不泄露数据隐私的情况下,允许互不信任的参与⽅联合分析数据。SCQL采用半诚实安全模型,支持多⽅协作(N大于等于2方),并提供MySQL兼容的SQL接口。关键特性包括列级别授权(CCL)、多种密态协议支持和跨多种数据源接入。CCL是列控制列表,定义数据使用约束。SCQL架构包括SCDB(不参与计算)和SCQLEngine(部署在数据参与⽅),通过流程图和架构图展示其工作原理,适用于医疗研究、联合营销和保险理赔等场景。
|
安全 C++
【C++11保姆级教程】移动构造函数(move constructor)和移动赋值操作符(move assignment operator)
【C++11保姆级教程】移动构造函数(move constructor)和移动赋值操作符(move assignment operator)
1679 0
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
71413 5
详解HTTP四种请求:POST、GET、DELETE、PUT
|
存储 安全 测试技术
数组越界:深入理解、危害与防范
数组越界:深入理解、危害与防范
2916 18
|
存储 缓存 C语言
【C/C++ 库的动态链接】深入理解动态链接器:RPATH, RUNPATH与$ORIGIN
【C/C++ 库的动态链接】深入理解动态链接器:RPATH, RUNPATH与$ORIGIN
905 0
|
项目管理 开发工具 Android开发
repo跟git的关系
Repo与Git不是替代关系,而是相互补充。Git关注于单个仓库的版本控制,而Repo在此基础上提供了一套管理多个Git仓库的框架,特别适合处理大规模、多组件协同开发的项目。通过Repo,开发者可以更高效地处理复杂的项目结构,同时享受Git带来的版本控制优势,两者结合,为大型软件项目管理提供了强大的支撑。
727 1
|
存储 安全 编译器
C++ std::move以及右值引用全面解析:从基础到实战,掌握现代C++高效编程
C++ std::move以及右值引用全面解析:从基础到实战,掌握现代C++高效编程
923 1
|
存储 JSON 关系型数据库
MySQL JSON 类型:功能与应用
MySQL JSON 类型:功能与应用
|
存储 安全 对象存储
Cookie和Session的区别:从原理到应用
【2月更文挑战第18天】
1267 6
|
机器学习/深度学习 编解码 计算机视觉
YOLOv8改进 | 2023注意力篇 | HAttention(HAT)超分辨率重建助力小目标检测 (全网首发)
YOLOv8改进 | 2023注意力篇 | HAttention(HAT)超分辨率重建助力小目标检测 (全网首发)
550 0