我试图利用这个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
被取消引用的PyObjects填充之前是未知的
它不仅是指向
PyObject*
指针的指针,而且是指向PyObject*
指针数组的第一个元素的指针您可以看到它正在分配内存以容纳
self.n_workers
,可能工人是使用PyObject派生实现的,因此在内存中您将拥有:相关问题 更多 >
编程相关推荐