Alignas
は私が期待しているとおり動作していません。これは私のコードです:期待通りの結果が得られないC - アライナスC11の
#include <inttypes.h>
#include <stdalign.h>
#include <stdio.h>
struct A
{
alignas(int32_t) int16_t a;
int16_t b;
};
struct B
{
int16_t a;
alignas(int32_t) int16_t b;
};
struct C
{
int16_t a;
int32_t b;
};
struct D
{
int32_t a;
int16_t b;
};
int main(void)
{
printf("%zu, %zu\n", alignof(int16_t), sizeof(int16_t));
printf("%zu, %zu\n", alignof(int32_t), sizeof(int32_t));
printf("%zu, %zu\n", alignof(struct A), sizeof(struct A));
printf("%zu, %zu\n", alignof(struct B), sizeof(struct B));
printf("%zu, %zu\n", alignof(struct C), sizeof(struct C));
printf("%zu, %zu\n", alignof(struct D), sizeof(struct D));
}
は出力:
2, 2
4, 4
4, 4
4, 8
4, 8
4, 8
私はすべてのこれらの構造体のサイズが同じであると予想しました。 struct A
はなぜstruct B
と同じサイズではないのですか? alignas
の仕組みを誤解していますか?