2016-02-13 28 views
2

我为我的OpenGL纹理格式创建了标题。我希望将结构大小对齐到512以便将来添加必要的成员。我在我的结构之前和之后添加了#pragma pack(push, 1)#pragma pack(pop)。我的意思是像填充(?)bootloader一样对齐到512字节。如何将结构与指定尺寸对齐

更新: 我已经在ideone上做了一些代码。这是它:http://ideone.com/CW0kY4

+2

你可以尝试把你的整个结构成'联合'与'char [512]'元素。 – Logicrat

+1

你真的是指“对齐”,还是“填充到X字节”? –

回答

1

您可以将一个成员添加到您的结构中,该成员称为“保留”,它是一个字节数组。这使得总大小为512字节:

typedef struct 
{ 
    uint8_t Member1; 
    uint8_t Member2; 

    uint8_t Reserved[510]; // Reserved data for future use which is the remainder 
} Data; 

或者您可以使用一个嵌套的结构,可以自动计算在编译时数据的大小:

typedef struct 
{ 
    int Member1; 
    int Member2; 
} Data; 

typedef struct 
{ 
    Data TheData; 
    uint8_t Reserved[512-sizeof(Data)]; 
} FullData; 
+2

这实际上并不特别实用,因为您必须添加其他元素的大小。在这种情况下,这不是非常困难,但是如果有几十个大小不同的成员会变得非常困难。 –

+0

@MatsPetersson我更新了答案,并为此提供了解决方案。 – Emil

+0

这并不是说它必然会降低答案的有效性,但这个答案的第一个解决方案也假设int的大小为32位,但不一定能保证。 'int's只能保证至少16位。考虑使用'int32_t'来代替Emil。 – SpencerD