2015-04-04 84 views
1

我正在使用Cython封裝Python的c庫。
我有指向我的C代碼中的可調用Python對象的指針,以便稍後從C代碼中調用它們。
如果我只有地址,如何確保回收沒有垃圾收集或刪除。測試python對象是否有效

回答

4

只是__Pyx_INCREF(obj)你持有的物體 - 這確保它不會消失! 記得__Pyx_DECREF(obj)一旦你完成它 - ,並參見https://github.com/cython/cython/wiki/refcounting的細節!)

+0

我知道如何防止gc收集。我通常把它放在列表或字典中(在Python或cython方面),問題是如何測試給定地址的有效性。 – 2015-04-04 05:10:04

+0

@AlexV。,答案是,**沒有**的方式。如果您選擇不保留該對象,它可能已被釋放,因此該地址處的內存現在可能是垃圾(無法確保它是**垃圾)或其他完全不相關的對象的一部分。如果你在乎,**堅持**到對象 - 內存是可替代的,除了一個地址沒有,也永遠不會!,一種確定的方式「這是一個PyObj的地址,有人爲我保持活力,因爲我不能被打擾「! - ) – 2015-04-04 05:27:59