gpt4 book ai didi

cython - cython 何时以及如何进行边界检查?

转载 作者:行者123 更新时间:2023-12-04 02:21:09 27 4
gpt4 key购买 nike

c 不做边界检查。那么cython是如何检查是否编译成c的呢?

%%cython --annotate
cimport cython
@cython.boundscheck(True)
cpdef myf():
cdef double pd[8]
for i in range(100):
pd[i] = 0
print pd[i]

无论我为 boundscheck 设置 True 还是 False,上面的代码都会编译成相同的 C 代码。如果我运行 myf() 则没有任何警告(恰好不会崩溃...)。

更新

所以 cython 无论如何都不会对 c 数组进行边界检查。

最佳答案

http://docs.cython.org/src/reference/compilation.html#compiler-directives

“Cython 可以自由假设代码中的索引操作([]-运算符)不会引发任何 IndexErrors。列表、元组和字符串会受到影响……”

我认为在您的代码中,C double 组不会在任何地方存储它的长度,因此 Cython 不可能进行任何有用的检查(除了您非常简单的示例)。但是,可以引发 IndexError 的内置 Python 类型应该有所不同(我假设 numpy 数组、python 数组和 cython 内存 View 也应该受到影响,因为它们都有一种机制让 Cython 判断是否它已经结束了)。

关于cython - cython 何时以及如何进行边界检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29263757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com