相关疑难解决方法(0)

联盟元素对齐

如果我有一个联合,C标准保证联合本身将与最大元素的大小对齐.

union U {
    long l;
    int i;
    short s;
    char c[2];
} u;
Run Code Online (Sandbox Code Playgroud)

但它对联盟内各个联盟元素的对齐有什么看法呢?以下表达式是否保证是真的?

(&u.l == &u.i) && (&u.i == &u.s) && (&u.s == &u.c[0])
Run Code Online (Sandbox Code Playgroud)

c alignment unions

20
推荐指数
1
解决办法
9334
查看次数

这是一种使堆栈缓冲区为八字节对齐的可移植方式吗?

struct {
  uint64_t a; char z[120];
} b;

...

struct buffer_with_alignment_requirement* c = (struct buffer_w*)&b;
c->start_using_it;
Run Code Online (Sandbox Code Playgroud)

如果没有第一个成员a,我们可能会在访问缓冲区中的字段时崩溃.简单地添加这样的成员以强制整个结构的对齐是否足够严格,是否可移植且正确?

这不是关于指针别名的问题,只是关于b堆栈上的地址是否总是八字节对齐.

c

5
推荐指数
1
解决办法
315
查看次数

标签 统计

c ×2

alignment ×1

unions ×1