0

我了解结构对齐是“特定于实现的”,但只是想知道是否有任何简单的方法来计算结构对齐,例如:

typedef struct
{
    char c;
    int  i;
} test;

if sizeof(test) - (sizeof(char) + sizeof(int)) == 0 means alignment is  1 byte;
if sizeof(test) - (sizeof(char) + sizeof(int)) == 1 means alignment is  2 bytes;
// ...etc...

上述假设可靠吗?

4

3 回答 3

4

在一般情况下,您的方法不可靠:如果您在此结构上尝试过:

typedef struct
{
    int i1;
    int i2;
} test;

它会给你零作为结果,这可能不是对齐。

不过,这是一种有效的方法:

#include <stddef.h>

struct dummy
{
    char x;
    test t;
};

size_t test_alignment = offsetof(struct dummy, t);
于 2009-08-31T00:36:04.357 回答
1

这是我工具箱中的宏(使用caf 的技术)来获得类型的对齐:

#define ALIGNMENT_OF(t) offsetof( struct { char x; t dummy; }, dummy)

所以现在你可以使用这样的表达式:

typedef struct
{
    char c;
    int  i;
} test;

size_t x = ALIGNMENT_OF( test);    // will likely set x = 4

请注意,特定编译器可能支持您可能更喜欢使用的非标准内在函数(例如,MSVC 在某些时候开始支持__alignof()内在函数)。如果它检测到支持它的编译器,我的标头定义ALIGNMENT_OF()使用该内在函数(尽管老实说我不知道​​内在函数提供了什么优势)。

于 2009-08-31T06:42:27.407 回答
0

如果您想要的只是一个好的初步猜测,那么可以传递地找到结构和任何嵌套结构中最大的非聚合成员的最大大小

于 2009-08-31T00:35:27.510 回答