最近我看到了这个宏:
#define asOFFSET(s,m) ((size_t)(&reinterpret_cast<s*>(100000)->m)-100000)
我发现这是从结构的开头计算任何m
的任何项struct s
的位置偏移的方法。
然而,当我运行它并比较两个结构MyStuct2
和MyStruct3
的计算时,我们得到的结果只有一int var3
加了MyStruct3
。相差8个字节,而不是我预期的4个字节。
这是我运行的代码:
#include <time.h>
#include <stdio.h>
#define asOFFSET(s,m) ((size_t)(&reinterpret_cast<s*>(100000)->m)-100000)
struct MyStruct1 {int var1; int a;};
struct MyStruct2 {long var2; int a;};
struct MyStruct3 {int var3; long var4; int a;};
int main (void)
{
printf("%d\n",(int)asOFFSET(MyStruct1,a));
printf("%d\n",(int)asOFFSET(MyStruct2,a));
printf("%d\n",(int)asOFFSET(MyStruct3,a));
// Result:
// 4
// 8
// 16
}
这是它给出的输出:
4
8
16
我的问题是如何修复实际内存以使一个int
占用4个字节而不是8个字节?
感谢。