为了账号安全,请及时绑定邮箱和手机立即绑定

Cython 中的这个声明是什么?cdef PyObject **workers。它是一个指向指针的

Cython 中的这个声明是什么?cdef PyObject **workers。它是一个指向指针的

慕森王 2023-07-18 09:38:58
我似乎无法在 Cython 文档中找到有关此符号实际含义的任何信息。  cdef FLOAT_t[:] numbers    cdef unsigned int i    cdef INDEX_t n_workers    cdef PyObject **workers    cdef list ref_workers #Here to maintain references on Python side        def __init__(Parent self, INDEX_t n_workers, list numbers):        cdef INDEX_t i        self.n_workers = n_workers        self.numbers = np.array(numbers,dtype=float)        self.workers = <PyObject **>malloc(self.n_workers*cython.sizeof(cython.pointer(PyObject)))                #Populate worker pool        self.ref_workers = []        for i in range(self.n_workers):            self.ref_workers.append(Worker())            self.workers[i] = <PyObject*>self.ref_workers[i]        def __dealloc__(Parent self):        free(self.workers)这个**符号是否意味着它是一个指向 PyObject 的指针?我知道该<>符号是为了取消引用指针,这一行也是如此:self.workers = <PyObject **>malloc(self.n_workers*cython.sizeof(cython.pointer(PyObject)))分配未知量的内存,因为 PyObject 的大小在self.workers充满取消引用的 PyObject 之前是未知的?
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

它不仅是指向PyObject*指针的指针,而且还是指向指针数组的第一个元素的指针PyObject*。


您可以看到它正在分配内存以容纳self.n_workers,大概这些工作人员是使用 PyObject 衍生物实现的,因此在内存中您将拥有:


self.workers -> self.workers[0] (PyObject* for 1st worker)

                self.workers[1] (PyObject* for 2nd worker)

                ....

                self.workers[N-1]  (PyObject* for last worker)


查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信