我有两个大的ctypes数组,我想比较,没有额外的内存。直接比较不起作用:
>>> a = ctypes.create_string_buffer(b'1'*0x100000)
>>> b = ctypes.create_string_buffer(b'1'*0x100000)
>>> a == b
False
使用value
或raw
属性在内存中创建数组的副本。在
使用memoryview
来包装两个缓冲区会大大降低速度。在
对于windows,一个可能的解决方案是直接使用msvcrt.memcmp
,但是有没有一种更像python的方式或者跨平台的方式来实现呢?在
可以使用
ctypes.util.find_library
以独立于平台的方式找到特定的C库。库公开的函数可以根据需要使用。在因此,可以通过执行以下操作来比较数组:
请注意,如果调用不正确,这些函数调用是非常不宽容的。通过设置函数的argtypes,可以使函数在调用库函数之前检查其参数。在
在不使用大量额外内存的情况下,比较数组的纯python方法如下。它使用一个生成器,一次比较每个元素,而不是将整个数组复制到其他地方然后进行比较。在
^{pr2}$这样做的缺点是,将创建许多对象,每个对象的内存占用很小,这将以其自身的计算开销(CPU而不是内存)来创建。在
相关问题 更多 >
编程相关推荐