使用带reinterpret_cast的宏定义内存使用情况或字段大小

时间:2014-06-17 00:10:44

标签: c++ macros struct

最近我看到了这个宏:

#define asOFFSET(s,m) ((size_t)(&reinterpret_cast<s*>(100000)->m)-100000)

我发现这是从结构的开头计算任何m的任何项struct s的位置偏移的方法。

然而,当我运行它并比较两个结构MyStuct2MyStruct3的计算时,我们得到的结果只有一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个字节? 感谢。

0 个答案:

没有答案