Python C-API对象分配

Python C-API对象分配,第1张

Python C-API对象分配

这些文档位于http://docs.python.org/3.0/c-api/typeobj.html和
http://docs.python.org/3.0/extending/newtypes.html描述了如何创建自己的类型。

tp_alloc为实例执行低级内存分配。这等效于malloc(),并将refcnt初始化为1。Python有其自己的分配器PyType_GenericAlloc,但是一种类型可以实现专用的分配器。

tp_new与Python的__new__相同。与指向数据的指针相比,它通常用于将数据存储在实例本身中的不可变对象。例如,字符串和元组将数据存储在实例中,而不是使用char
或PyTuple

对于这种情况,tp_new根据输入参数计算出需要多少内存,并调用tp_alloc获取内存,然后初始化基本字段。tp_new不需要调用tp_alloc。例如,它可以返回缓存的对象。

tp_init与Python的__init__相同。您的大多数初始化都应在此函数中。

__new__和__init__之间的区别称为两阶段初始化或两阶段初始化。

您说“ _c 只是有新的_ ”,但这是不正确的。tp_alloc对应于C
中的自定义竞技场分配器,__new__对应于自定义类型分配器(工厂函数),而__init__更类似于构造函数。最后一个链接详细讨论了C
++和Python风格之间的相似之处。

另请参阅http://www.python.org/download/releases/2.2/descrintro/了解有关__new__和__init__如何交互的详细信息。

您写道,您想“直接在c 中创建对象”。这相当困难,因为至少您必须将对象实例化期间发生的所有Python异常转换为C 异常。您可以尝试查看Boost
:: Python以获得有关此任务的一些帮助。或者,您可以使用两阶段初始化。;)



欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5649136.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存