Мы знаем, что параметр размера, заданный конструктору SharedMemory, является минимальным. Таким образом, во многих случаях фактический размер может быть больше заданного — и это нормально.
Но что, если указанный размер точно кратен размеру базовой страницы памяти?
Но что, если указанный размер точно кратен размеру базовой страницы памяти?
p>
Подумайте об этом:
Код: Выделить всё
import numpy as np
from multiprocessing.shared_memory import SharedMemory
n = 2048
s = n * np.dtype(np.double).itemsize
shm = SharedMemory(create=True, size=s)
try:
assert s == shm.size
a = np.ndarray((n,), dtype=np.double, buffer=shm.buf)
a.fill(0.0)
finally:
shm.close()
shm.unlink()
Может быть, я недостаточно знаю о numpy, но я мог предположить, что ndarray потребуется больше места для внутренних / структуры управления.
Может кто-нибудь объяснить, почему это работает и почему нет очевидной необходимости выделять дополнительное пространство в сегменте общей памяти?
Подробнее здесь: https://stackoverflow.com/questions/790 ... umpy-array
Мобильная версия