我的 C 库中有一个函数,说runsim()
它将指针struct repdata
作为参数之一,其中struct repdata
由
struct repdata {
int *var1;
int *var2;
int *var3;
char *var4;
double *var5;
double *var6;
int *var7;
};
当专门使用 C 时,我初始化了一个struct repdata
调用函数的类型的变量,
struct repdata data;
void create_data_container(struct repdata *data, int len_data)
{
data -> var1 = malloc( sizeof(int) * len_data );
data -> var2 = malloc( sizeof(int) * len_data );
data -> var3 = malloc( sizeof(int) * len_data );
data -> var4 = malloc( sizeof(char) * len_data );
data -> var5 = malloc( sizeof(double) * len_data);
data -> var6 = malloc( sizeof(double) * len_data);
data -> var7 = malloc( sizeof(int) * len_data);
}
然后随着模拟的进行填充这个结构。将数据写入文件后,我使用标准释放内存
free(data.var1);
free(data.var2);
.
.
.
free(data.var7);
我想runsim()
使用 Python Ctypes 从 Python 调用该函数。为此,我需要传递一个指向变量的指针(相当于 的类型struct repdata
)作为runsim()
参数之一。假设在 Python 中我struct repdata
以以下方式定义了一个等价物。
import ctypes as C
class Repdata(C.Structure):
_fields_ = [
("var1", C.POINTER(C.c_int)),
("var2", C.POINTER(C.c_int)),
("var3", C.POINTER(C.c_int)),
("var4", C.POINTER(C.c_char)),
("var5", C.POINTER(C.c_double)),
("var6", C.POINTER(C.c_double)),
("var7", C.POINTER(C.c_int)),
]
create_data_container
上面在 Python 端显示的函数的等价物是什么?我想初始化一个 Repdata 实例,该实例可以传递给 C 代码,并且有足够的内存来存储复制数据。而且,一旦模拟完成,如何从 Python 中释放内存?
我正在使用 Ubuntu Linux 12.04。
在此先感谢您的帮助。