我正在使用 ctypes 向 dll 传递一个数组指针,并返回一个指向 dll 中使用 malloc 创建的双数数组的指针。 在返回 Python 时,我需要一种快速的方法将指针转换为数组或 Python 列表。
我可以用这个列表编译,但它很慢,因为有32万个数据点。
list_of_results = [ret_ptr[i] for i in range(320000)]
理想的情况是我在Python中创建数组并把它传给dll,但是我必须在dll中使用malloc来创建它,因为这是一个动态数组,我事先不知道会有多少数据元素(尽管返回指针也会返回数据元素的数量,所以我在返回Python时知道有多少)--我在dll中使用realloc来动态扩展数组大小;我可以对Python数组使用realloc,但是在最后调用free()并不能保证工作。
Here is the relevant Python code:
CallTest = hDLL.Main_Entry_fn
CallTest.argtypes = [ctypes.POINTER(ctypes.c_double), ctypes.c_int64]
CallTest.restype = ctypes.POINTER(ctypes.c_double)
ret_ptr = CallTest(DataArray, number_of_data_points)
list_of_results = [ret_ptr[i] for i in range(320000)]
所以我的问题是:将一个从dll返回的指针转换为Python列表或数组的最快方法是什么? 上面显示的方法太慢了。
非常感谢。