【发布时间】:2009-11-17 15:01:52
【问题描述】:
我有一堂课是这样的:
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-internal_t) 产生 32。
我已经阅读了很多关于数据对齐的文章,但我不知道我在哪里使用了额外的数据。我尝试剥离自定义构造函数,但它保持不变,将 struct 的 class 关键字交换也不会改变它(我不明白它的用途,因为它发生了!)
这很烦人,我现在将使用 internal 类型,因为我不会经常接触数据,但是让类按我想要的方式工作会很棒。
【问题讨论】:
-
告诉我们 other_vector_type 的样子。
-
你应该让你的问题的代码部分更清楚......
-
一个完整的测试用例(编译并使用正确的语法)将有助于解决真正的问题。
-
myType-internal_t在我看来是个很可疑的名字。-'s 甚至允许在名称中使用吗?在我看来,它会被解析为不同的标识符,由减号运算符分隔(尽管不确定它是如何编译的) -
如果不告诉我们有关这个神秘的
other_vector4_type的任何信息,您将不会得到消息灵通的答案。但到目前为止,earlz 的答案可能是最好的:编译器不保证结构大小。允许在它认为合适的地方添加填充。