百科问答小站 logo
百科问答小站 font logo



如何理解 C++ 中这两个结构体的大小(size)? 第1页

  

user avatar   haozhi-yang-41 网友的相关建议: 
      

对齐这种事情不用特别纠结一个通用规则,实际上是很复杂的。

基本原则有几条:

  • 只有一个成员的话,不启动对齐规则
  • 对齐大小一般按照第一个成员来计算(有例外)
  • 如果相邻两个成员大小总和小于一个对齐大小,可能会挤进一个对齐单元里:
       struct Test {     int a;     char b;     short c; }; //sizeof(struct Test) = 8     


但不管怎么样,总是有例外的:

       struct Test {     short a;     char b[3];     int c; };     

这个结构体的大小是12,看样子是4*3的对齐方式?

不对,用offsetof看一下就知道,3个成员分别占2、6、4字节。


总之,对齐这种事情,知道有这么回事就行了,没必要细究一个放之四海而皆准的规则出来。具体实现是和编译器、平台、位宽等都有关系的。你真想严格按照你的想法去布置内存的话,直接用1对齐,然后自己用unused填空吧。


user avatar   s.invalid 网友的相关建议: 
      

这个问题透着一股邪乎味儿,怎么看怎么危险啊……

建议专业机构给予支援。




  

相关话题

  简单c++项目在Windows和Linux下编译连接怎样使用同一个Makefile? 
  为什么总是有人说 Java 啰嗦,却没人说 C++ 啰嗦? 
  c++ 中明明有vector了为什么还要有stack? 
  C++笔试算法题允许用stl函数吗? 
  C++ 中,如果指针换了被指向的东西,那被指向的原来的东西(是被 new 出来的)所占的内存会立刻被释放吗? 
  用C语言,能在100行之内实现贪吃蛇吗? 
  为什么C/C++要分为头文件和源文件? 
  现在的编程语言越来越多,为什么 C 和 C++ 还没有被现在的时代淘汰呢? 
  LeetCode上 C++ 官方题解为什么有很多没有写delete,不会内存泄漏么?面试时也可以么? 
  Windows C++如何直接写分区表? 

前一个讨论
为什么只有2%的特斯拉中国车主买全自动驾驶服务(FSD)?
下一个讨论
为什么古生物更强?





© 2025-02-20 - tinynew.org. All Rights Reserved.
© 2025-02-20 - tinynew.org. 保留所有权利