程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了cpython代码dictobject.c中marco`DK_ENTRIES`的含义是什么大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决cpython代码Dictobject.c中marco`DK_ENTRIES`的含义是什么?

开发过程中遇到cpython代码Dictobject.c中marco`DK_ENTRIES`的含义是什么的问题如何解决?下面主要结合日常开发的经验,给出你关于cpython代码Dictobject.c中marco`DK_ENTRIES`的含义是什么的解决方法建议,希望对你解决cpython代码Dictobject.c中marco`DK_ENTRIES`的含义是什么有所启发或帮助;

我阅读了 Dictobject.c 的代码,无法弄清楚

#define DK_ENTRIES(dk) \
    ((PyDictKeyEntry*)(&((int8_t*)((dk)->dk_inDices))[DK_SIZE(dk) * DK_IXSIZE(dk)]))

任何人都可以解释这个宏,帮助我阅读这个宏以及它的用途是什么?

解决方法

经过一番挣扎,我在下面找到了一些东西:

第一个 dkPyDictKeysObject

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 是结构体中的 dk_size

DK_IXSIZE 可以是 1 或 2 或 4 或 8

((int8_t*)((dk)->dk_inDices))[DK_SIZE(dk) * DK_IXSIZE(dk)]

是一个有 n(dk_size*1?) 偏移量的指针

最后返回一个指向PyDictKeyEntry

的指针

最后,这个宏返回一个 PyDictKeyEntry,它有 n(dk_size*1?)dk->dk_inDices 的偏移

大佬总结

以上是大佬教程为你收集整理的cpython代码dictobject.c中marco`DK_ENTRIES`的含义是什么全部内容,希望文章能够帮你解决cpython代码dictobject.c中marco`DK_ENTRIES`的含义是什么所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。