能力值:
( LV9,RANK:610 )
|
-
-
2 楼
请先学习一下结构体的对齐知识~
|
能力值:
( LV9,RANK:610 )
|
-
-
3 楼
解决办法是#pragma pack(push,1),不过完全没有必要~
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
教主,你说的这种形式:#pragma pack(push,1)和网上的不大一样:#pragma pack(n)
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我就是看看。搞不定。呵呵。!!~支持下。..呵呵。酷窝窝
|
能力值:
( LV9,RANK:610 )
|
-
-
6 楼
你自己实验下好了,像你这个程序,完全没有必要搞这个~
|
能力值:
( LV9,RANK:280 )
|
-
-
7 楼
楼主,请熟悉了解一下X86体系结构的优化知识。X86指令集平台下,最快的访问内存的方式是4字节对齐方式,也就是以DWORD对齐方式
你的结构体在内存中是这样的:
char char char __ ;4个字节
int ;4个字节
char __ __ __ ;4个字节
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
如果我没理解错的话,楼主想从一个指针的偏移3处取一个整型值,简单的办法是可以定义一个模板函数或定义如下宏:
#define MIntAt3(_p) *(int*)((char*)_p+3)
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
用offsetof是标准的用法
/* Define offsetof macro */
#ifdef __cplusplus
#ifdef _WIN64
#define offsetof(s,m) (size_t)( (ptrdiff_t)&reinterpret_cast<const volatile char&>((((s *)0)->m)) )
#else
#define offsetof(s,m) (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))
#endif
#else
#ifdef _WIN64
#define offsetof(s,m) (size_t)( (ptrdiff_t)&(((s *)0)->m) )
#else
#define offsetof(s,m) (size_t)&(((s *)0)->m)
#endif
#endif /* __cplusplus */
|
|
|