Python 为什么ctypes.memmove对于不同大小的大小需要恒定的时间

Python 为什么ctypes.memmove对于不同大小的大小需要恒定的时间,python,memory,memmove,Python,Memory,Memmove,当我运行以下代码时 import numpy as np import ctypes src = np.zeros(10000, dtype=np.uint8) dest = np.zeros(10000, dtype=np.uint8) %timeit ctypes.memmove(dest.ctypes.data, src.ctypes.data, 10) %timeit ctypes.memmove(dest.ctypes.data, src.ctypes.data, 10000)

当我运行以下代码时

import numpy as np
import ctypes

src = np.zeros(10000, dtype=np.uint8)
dest = np.zeros(10000, dtype=np.uint8)

%timeit ctypes.memmove(dest.ctypes.data, src.ctypes.data, 10)
%timeit ctypes.memmove(dest.ctypes.data, src.ctypes.data, 10000)
在我的笔记本电脑上,输出是

42.2 µs ± 5.62 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
用于复制10个字节,并且是

41.4 µs ± 3.48 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
用于复制10000字节


我的问题是:为什么ctypes.memmove对不同大小的文件需要恒定的时间?

因为调用开销会占用复制时间。在3GHz系统上,10000字节将在大约一微秒内复制。用10000000字节试试。

确实是。非常感谢。后续问题:如果我需要将非连续内存(例如,每4个字节复制3个字节并跳过1个字节)复制到连续内存位置,那么最好的方法是什么?我认为memmove并不理想,因为许多对它的调用都会产生很小的开销。即使在汇编语言中,也没有快速的方法来实现这一点,任何必须将RGB24转换为RGB32的人都知道这一点。