gpt4 book ai didi

c - GCC 隐式对齐问题。 (64 位代码)

转载 作者:行者123 更新时间:2023-12-02 06:43:06 26 4
gpt4 key购买 nike

如何在 gcc 中显式禁用已定义变量的对齐?
拿这段代码:

typedef struct{
unsigned long long offset;
unsigned long long size;
unsigned long type;
unsigned long acpi;
}memstruct;

memstruct *memstrx;

这将定义一个大小为 24 字节的结构。
我尝试这样做:

memstrx=(void*)(0x502);

所以

&memstrx[0] 的值应该是 0x502
&memstrx[1], 0x51A
&memstrx[2], 0x532

...等等等等。

但事情似乎不对。

相反,

&memstrx[1] ,显示地址为0x522
&memstrx[2], 0x542
&memstrx[3], 0x552

...等等等等。

我怀疑 GCC 已将结构的大小隐式地重新调整为 32 字节(从 24 字节),强制执行(每个条目的 64 位对齐)。而且我真的不希望这种行为只针对这种结构。我应该如何告诉 GCC 不对齐该结构?

最佳答案

不,这是不可能的。

您显示的结构的最小大小为 8*4 = 32 字节。

sizeof(unsigned long) = 8 在 64 位架构 (Linux) 上

编辑:如果你会使用

-unsigned 而不是 unsigned long

  • uint32_tuint64_t 而不是 unsigned longunsigned long long

你会得到预期的对齐方式。

关于c - GCC 隐式对齐问题。 (64 位代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4883670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com