加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python的扩展(Malloc)

发布时间:2020-12-20 13:39:11 所属栏目:Python 来源:网络整理
导读:我正在为 python编写C扩展.我想要做的就是将大小作为输入,创建该大小的对象并返回该创建对象的引用.我的代码看起来像: static PyObject *capi_malloc(PyObject *self,PyObject *args){ int size; if (!PyArg_ParseTuple(args,"i",size)) return NULL; //Do
我正在为 python编写C扩展.我想要做的就是将大小作为输入,创建该大小的对象并返回该创建对象的引用.我的代码看起来像:

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
}

我怎样才能做到这一点?我能够使用PyMem_Malloc()分配内存,但对返回对象的引用感到困惑.

解决方法

如果您真正想做的就是分配一个大小合适的原始内存区域并将其返回(即使它实际上并不是一个正确初始化的PyObject类型),只需执行以下操作:

char *buf = (char *)PyMem_Malloc(size);
return (PyObject *)buf;

不知道这是否有用,但它会编译并获得一个指向原始内存缓冲区的指针,该内存缓冲区已被强制转换为PyObject指针.

(这不是你的问题,但如果你真的想要一个诚实的善良PyObject指针,你将不得不处理类似PyObject_New()函数的调用.这里的文档:http://docs.python.org/2/c-api/allocation.html)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读