结构体内存对齐经典题

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

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


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


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


第一题:


在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(部署在数据参与⽅),通过流程图和架构图展示其工作原理,适用于医疗研究、联合营销和保险理赔等场景。
|
1月前
|
人工智能 自然语言处理 开发者
Qoder 降价,立即生效!首购 2 美金/月
Qoder全球上线两月获数十万开发者信赖!现首购仅2美元/月,享全功能AI编程利器。集成顶尖模型,支持10万文件检索、智能体异步执行、CLI终端交互,助力高效开发。
532 8
|
安全 C++
【C++11保姆级教程】移动构造函数(move constructor)和移动赋值操作符(move assignment operator)
【C++11保姆级教程】移动构造函数(move constructor)和移动赋值操作符(move assignment operator)
1722 0
|
存储 安全 测试技术
数组越界:深入理解、危害与防范
数组越界:深入理解、危害与防范
3015 18
|
存储 缓存 C语言
【C/C++ 库的动态链接】深入理解动态链接器:RPATH, RUNPATH与$ORIGIN
【C/C++ 库的动态链接】深入理解动态链接器:RPATH, RUNPATH与$ORIGIN
949 0
|
IDE Java 编译器
Java“找不到符号” 错误怎么查找解决
“找不到符号”是Java编程中常见的编译错误,通常表明代码试图访问未声明或不可见的符号(如类、方法或变量)。解决此问题需检查拼写、导入包是否正确及作用域是否合适。确保使用正确的类路径和库,可有效避免此类错误。若问题依旧,查阅官方文档或使用调试工具定位错误亦为良策。
6735 10
|
项目管理 开发工具 Android开发
repo跟git的关系
Repo与Git不是替代关系,而是相互补充。Git关注于单个仓库的版本控制,而Repo在此基础上提供了一套管理多个Git仓库的框架,特别适合处理大规模、多组件协同开发的项目。通过Repo,开发者可以更高效地处理复杂的项目结构,同时享受Git带来的版本控制优势,两者结合,为大型软件项目管理提供了强大的支撑。
767 1
|
存储 安全 编译器
C++ std::move以及右值引用全面解析:从基础到实战,掌握现代C++高效编程
C++ std::move以及右值引用全面解析:从基础到实战,掌握现代C++高效编程
949 1
|
存储 安全 对象存储
Cookie和Session的区别:从原理到应用
【2月更文挑战第18天】
1296 6
|
Ubuntu 安全 虚拟化
vmware虚拟机运行ubuntu等卡慢的解决办法
vmware虚拟机运行ubuntu等卡慢的解决办法
4492 0