c++ - 为什么我的对象占用 64 字节而不是 32 字节?

标签 c++ struct unions

我有一个类是这样的:

class myType
{

  union {
      float data[4];
      other_vector4_type v
  } ;
  typedef union {
      float data[4];
      other_vector4_type v
  } myType-internal_t;

 <various member functions, operator overloads>

}

现在我想在我的顶点缓冲区中使用这种类型,但是 sizeof() 不是预期的。我将类对齐到 16 个字节。

sizeof(myType) 产生 64。

sizeof(myType::myType-in​​ternal_t) 产生 32。

我已经阅读了很多关于数据对齐的文章,但我不知道我在哪里使用了额外的数据。我尝试剥离自定义构造函数,但它保持不变,将 class 关键字替换为 struct 也不会改变它(我不明白它的用途,因为它发生了!)

这很烦人,我现在将使用内部类型,因为我不会经常接触数据,但让类按我想要的方式工作会很棒。

最佳答案

C++ 编译器可以根据需要将该结构设置为 128 字节。 C++ 标准未定义结构/union 的大小。但是,大多数编译器都有一个非标准的 __PACKED 属性,您可以将其添加到结构的声明中,它只会占用它需要的确切字节数

关于c++ - 为什么我的对象占用 64 字节而不是 32 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1749459/

相关文章:

c - 了解打破严格别名的后果

C++ 我需要为一个函数到处写 throw 子句吗?

go - 带 slice 结构的隐式类型

c++ - 如何为 SENS 事件注册接收器对象

c - 了解 C 中结构的流程

c - 动态分配的结构中的字符数组存储在哪里?

我可以使用箭头运算符 (->) 访问我的并集吗?

c - 平方根 union 和位移位

c++ - 如何使用 xmlite 将 xml 存储在缓冲区中?

c++ - #define 和 const 的分配