python 代码 dictobject.c 中的 marco `DK_ENTRIES` 是什么意思
what 's meanning of the marco `DK_ENTRIES` in cpython code dictobject.c
我看了dictobject.c
的代码,搞不懂这个
#define DK_ENTRIES(dk) \
((PyDictKeyEntry*)(&((int8_t*)((dk)->dk_indices))[DK_SIZE(dk) * DK_IXSIZE(dk)]))
谁能解释一下这个宏,帮我看看这个宏是干什么用的?
经过一番挣扎,我找到了下面的东西:
第一个dk
是PyDictKeysObject
:
typedef struct _dictkeysobject PyDictKeysObject;
struct _dictkeysobject {
Py_ssize_t dk_refcnt;
Py_ssize_t dk_size;
dict_lookup_func dk_lookup;
Py_ssize_t dk_usable;
Py_ssize_t dk_nentries;
char dk_indices[];
};
注意最后一个元素dk_indices
、灵活数组成员
简单地说,
DK_SIZE
是struct中的dk_size
;
DK_IXSIZE
可以是1或2或4或8
((int8_t*)((dk)->dk_indices))[DK_SIZE(dk) * DK_IXSIZE(dk)]
是一个有n(dk_size*1?)偏移量的指针
和结尾 return 指向 PyDictKeyEntry
的指针
最后,这个宏 return 一个 PyDictKeyEntry
,其中有 n(dk_size*1?)
与 dk->dk_indices
的偏移量
我看了dictobject.c
的代码,搞不懂这个
#define DK_ENTRIES(dk) \
((PyDictKeyEntry*)(&((int8_t*)((dk)->dk_indices))[DK_SIZE(dk) * DK_IXSIZE(dk)]))
谁能解释一下这个宏,帮我看看这个宏是干什么用的?
经过一番挣扎,我找到了下面的东西:
第一个dk
是PyDictKeysObject
:
typedef struct _dictkeysobject PyDictKeysObject;
struct _dictkeysobject {
Py_ssize_t dk_refcnt;
Py_ssize_t dk_size;
dict_lookup_func dk_lookup;
Py_ssize_t dk_usable;
Py_ssize_t dk_nentries;
char dk_indices[];
};
注意最后一个元素dk_indices
、灵活数组成员
简单地说,
DK_SIZE
是struct中的dk_size
;
DK_IXSIZE
可以是1或2或4或8
((int8_t*)((dk)->dk_indices))[DK_SIZE(dk) * DK_IXSIZE(dk)]
是一个有n(dk_size*1?)偏移量的指针
和结尾 return 指向 PyDictKeyEntry
最后,这个宏 return 一个 PyDictKeyEntry
,其中有 n(dk_size*1?)
与 dk->dk_indices