我正在为python编写C扩展名。我要做的只是将其size作为输入,创建该对象的一个对象,size然后返回该创建对象的引用。我的代码如下:
static PyObject *capi_malloc(PyObject *self, PyObject *args)
{
int size;
if (!PyArg_ParseTuple(args, "i", &size))
return NULL;
//Do something to create an object or a character buffer of size `size`
return something
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我能够使用PyMem_Malloc()但对返回对象的引用感到困惑的方式分配内存。
如果您真正想做的只是分配一个大小的原始内存区域 size并返回它(即使它不是真正正确初始化的 PyObject 类型),只需执行以下操作:
char *buf = (char *)PyMem_Malloc(size);
return (PyObject *)buf;
Run Code Online (Sandbox Code Playgroud)
不确定这是否有用,但它会编译并为您提供一个指向已转换为 PyObject 指针的原始内存缓冲区的指针。
(这不是你的问题,但如果你真的想要一个诚实的 PyObject 指针,你将不得不处理调用像 PyObject_New() 函数这样的东西。这里的文档:http: //docs.python.org/2/c -api/allocation.html )