pri*_*ner 2 c gcc memory-alignment
如何在gcc中明确禁用对定义变量的对齐?
拿这个代码:
typedef struct{
unsigned long long offset;
unsigned long long size;
unsigned long type;
unsigned long acpi;
}memstruct;
memstruct *memstrx;
Run Code Online (Sandbox Code Playgroud)
这将定义一个大小为24字节的结构.
我试过做:
memstrx=(void*)(0x502);
Run Code Online (Sandbox Code Playgroud)
所以
&memstrx[0]应该有一个值
&memstrx[1]0x502,0x51A
&memstrx[2],0x532
......依此类推.
但事情似乎并不正确.
相反,
&memstrx[1]时,显示的0x522地址
&memstrx[2],0x542
&memstrx[3],0x552
... 等等等等.
我怀疑GCC已经隐式地将结构重新调整为32个字节(从24个字节),强制a(每个条目的64位对齐).我真的不希望这种行为只适用于这种结构.我该如何告诉GCC不要对齐那个结构?
不,不能做到.
您显示的结构的最小大小为8*4 = 32字节.
64位架构上的sizeof(unsigned long)= 8(Linux)
编辑:如果你愿意的话
- unsigned而不是unsigned long
要么
uint32_t而uint64_t不是unsigned long和unsigned long long 你会得到预期的对齐.
| 归档时间: |
|
| 查看次数: |
4076 次 |
| 最近记录: |