【发布时间】:2015-12-03 22:10:50
【问题描述】:
我正在做一些小区宽带引擎编程,在调查分段错误时遇到了一个我无法解释的奇怪事情,基于以下代码:
struct SPU_DATA
{
unsigned char *i;
unsigned char *o;
unsigned int width;
unsigned int height;
unsigned int bpp;
char padding[108];
} __attribute__((aligned(128)));
当我将这个结构的大小输出到 ppu 上的控制台时,输出值 256。但是,当我在 spu 上输出大小时,它会显示为 128,这是预期的结果。
我找不到原因。有什么想法吗?
【问题讨论】:
-
也许整数和指针在 ppu 上是 64 位的?
-
也可以是 1013 字节或任何其他值。除了
char之外,不保证类型具有特定大小或没有填充。如果您依赖特定的布局,从/到char [](反)序列化。其他任何事情都是未定义行为的秘诀。而char也不一定是 8 位。 -
@IanYoung 很可能是这种情况。如果 sizeof(int) 为 8,那么它不能容纳 128 个字节。所以它将与另外 128 个字节对齐。
-
@Olaf 通常实现确实保证了这些事情,即使语言没有。
-
@Olaf 我错了,实现通常定义结构布局?