术语表

扩展类型

“扩展类型”可以指用 cdef class@cclass 定义的 Cython 类,或者更一般地指任何最终实现为原生 C 结构的 Python 类型(包括内置类型,如 intdict)。

动态分配或堆分配

使用 malloc(在 C 中)或 new(在 C++ 中)分配的 C 变量是 动态分配/堆分配 的。它的生命周期一直持续到用户显式删除它(在 C 中使用 free 或在 C++ 中使用 del)。这可能发生在与分配不同的函数中。

全局解释器锁或 GIL

Python 解释器中的一个锁,用于确保一次只运行一个 Python 线程。此锁纯粹是为了确保竞争条件不会破坏内部 Python 状态。除非持有 GIL,否则无法操作 Python 对象。在编写应并行运行的代码时,它与 Cython 最为相关。如果您不打算编写并行代码,那么在 Cython 中释放 GIL 通常没有好处。您不应该在代码中将 GIL 用作通用锁定机制,因为对 Python 对象的许多操作会导致它被释放,并将控制权传递给另一个线程。另请参见 CPython 项目的术语表条目

指针

指针是一个存储另一个变量地址的变量(即内存位置的直接地址)。它们允许动态内存分配和释放。它们可以用来构建动态数据结构。 了解更多

Python 对象

在使用 Python 时,每个变量的内容都是一个 Python 对象(包括 Cython 扩展类型)。Python 对象的关键特性是它们是通过引用传递的,并且它们的生存期是自动管理的,因此当不再存在对它们的引用时,它们会被销毁。在 Cython 中,它们与 C 类型不同,C 类型是通过传递的,并且它们的生存期根据它们是在堆栈上还是堆上分配来管理。要在 Cython 中显式声明 Python 对象变量,请使用 cdef object abc。在 C 中,它们被称为 PyObject*

堆栈分配

在函数中声明为 cdef SomeType a 的 C 变量被称为在堆栈上分配。它只在函数持续时间内存在。

类型化内存视图

一个有用的 Cython 类型,用于快速访问内存块。内存视图本身实际上不拥有任何内存。但是,它可以使用支持 缓冲区协议 的 Python 对象(通常是“数组”类型,例如 Numpy 数组)进行初始化。内存视图保持对该 Python 对象的引用处于活动状态,并提供对内存的快速访问,而无需通过对象的 Python API 及其 __getitem__() / __setitem__() 方法。有关更多信息,请参见 类型化内存视图