Cython 中的这个声明是什么? cdef PyObject **工人。它是指向指针的指针吗?
What is this declaration in Cython? cdef PyObject **workers. Is it a pointer to a pointer?
我正在尝试将此 sample code 中的概念并行地用于 运行 一些 Cython 代码,但我似乎无法在 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 填充之前是未知的?
它不仅是指向 PyObject*
指针的指针,还是指向 PyObject*
指针数组第一个元素的指针。
你可以看到它正在分配内存以容纳self.n_workers
,大概worker是使用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)
我正在尝试将此 sample code 中的概念并行地用于 运行 一些 Cython 代码,但我似乎无法在 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 填充之前是未知的?
它不仅是指向 PyObject*
指针的指针,还是指向 PyObject*
指针数组第一个元素的指针。
你可以看到它正在分配内存以容纳self.n_workers
,大概worker是使用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)