【发布时间】:2021-11-24 12:20:39
【问题描述】:
我需要编写一个通过 id 返回对象的函数。我不能使用ctypes.cast、_ctypes、gc、locals、globals等,建议使用struct和ctypes。例如,对于一个 int 类型的对象,我写如下:
struct.unpack ("LLli", ctypes.string_at (id_of_object, 28))
如果我知道对象的大小是 28 字节。但是对象可以是任意大小。例如,对于 object = 2**30,大小将为 32 字节。我可以通过它的 id 以某种方式获取对象本身的大小吗?或者我需要在这个任务中使用其他方法吗?
【问题讨论】:
-
为什么不能你使用
ctypes.cast而可以使用ctypes.string_at?这是一个奇怪的限制。正如前面评论中的链接所指出的,无论如何这都不是一个好主意。 -
这只是学习任务,我想我们的导师希望我们了解不同的对象在内存中的位置。
-
很公平。但我建议从 CTypes 类型开始(你知道布局)。然后并且只有在那时(当您对 CPython 实现细节有足够的经验时)才转移到通用对象。