是否在 C 结构中填充了信号量 (sem_t) 以尊重对齐?

问题描述 投票:0回答:1

我目前正在用 C(在 ubuntu x64 中)定义一个结构。它看起来像这样:

#include <semaphore.h>
#include <stdio.h>
#include <stdbool.h>

typedef struct key{
    sem_t sem;
    char name[32];
    int val1;
    int val2;
    char k;
    int n;
} Key;

据我所知(如果有误,请纠正我),x64 中的结构成员将对齐到 8 个字节,而在 x32 中将对齐到 4 个字节。这也是我选择 32 作为 id 数组大小的原因。

我想知道的是:事实上(第一个成员是 sem_t(显然是 32 字节),下一个成员是那个或任何其他东西)第一个(sem)和第二个成员(名称)之间是否会有填充, 在这种情况下)?或者它们是相邻的?如果是这样,这是否适用于 x32 和 x64(因为 32 字节是 4 和 8 字节的倍数)?

提前致谢!

c struct cpu-architecture semaphore memory-alignment
1个回答
-1
投票

视情况而定,但让我回答一个问题:
为什么他们不应该对齐???

除了互联网数据包之类的东西,
一切都应该是。

© www.soinside.com 2019 - 2024. All rights reserved.