站內搜尋

2014/8/14

C/C++ 確認 Struct member offset 的工具

今天介紹一個小工具,對於常常需要做記憶體運算的朋友應該還算滿有用途的。
假設你常需要說計跨系統的溝通介面,在 struct 的設計上有時便免不了會碰到 Data alignment 的問題,在查問題的時候,有時會需要確認每個 Struct 中的 member 所處在的位置(offset),這時這個 macro 就滿方便的。
// Define this macro.
#define offset(A, b) (&(((A *)0)->b))
其中的 A 請帶 struct type,B 請帶你想知道位置的 member name,最後就會傳回該 member 相對於 struct 位置的 offset size。
typedef struct
{
    int16 x;
    int8 y;
    int32 z;
} A

offset(A, y);
它利用強轉的特性,去將 Address 0 轉為 type A,再指向 y 的位址,最後取址,因為相對位址是 0,取出來的自然就是 A.y 的 offset 了。

其實這是我曾經的一個老闆很愛用來考新人的考題,但,其實也是個滿方便的小工具就是了。

1 則留言:

  1. Betway Casino PA - Use Code 365RF for $1000 Welcome Bonus
    Betway Casino Review 충주 출장마사지 The main advantage of Betway Casino is 의정부 출장안마 the 여수 출장샵 ease to 문경 출장샵 play and the bonus money in addition. 구리 출장안마 It's a generous welcome  Rating: 4 · ‎Review by TJ Hub · ‎$1000.00

    回覆刪除

熱門文章