今天阅读代码发现有这么个东西,查了google,看了一些文章,自己动手试验了一下,对此有了些了解,记录一下
#define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
这个宏是用来取结构体或类里面成员的偏移地址。
例如:
class CTest
{
public:
int a;
int b;
};
int offset = FIELD_OFFSET(CTest,b);
这个时候我们可以顺便看一下内存对齐的问题,我们把类改一下
class CTest
{
public:
char c;
int a;
int b;
};
int offset = FIELD_OFFSET(CTest,b);
结果不是5,是8