0

これが私がやろうとしていることの例です:

import ctypes
MEM_SIZE = 1024*1024*128

# allocate memory (this is Windows specific)
ptr = ctypes.cdll.msvcrt.malloc(MEM_SIZE)

# make memory accessible to Python calls
mem = ctypes.string_at(ptr, MEM_SIZE)
# BAD: string_at duplicates memory

# store it to disk
open(r'test.raw', 'wb').write(mem)

一言で言えば、私はプレーンなメモリ ポインターを持っています。ブロックのサイズを知っていて、それをディスクに格納するか、numpy 配列として再利用したいと考えています。

メモリ ブロックのコピーを生成せずにそれを行うにはどうすればよいですか?


関連する質問: stackoverflow: Fill python ctypes pointer (ヒントをくれた Brian Larsen に感謝)

4

1 に答える 1

2
ctypes_array = (ctypes.c_char * MEM_SIZE).from_address(ptr)
with open('test.raw', 'wb') as f:
    f.write(ctypes_array)

numpy_array = numpy.frombuffer(ctypes_array, dtype=numpy.byte)
numpy_array.tofile('test.raw')
于 2012-05-09T09:11:03.147 に答える