Есть ли такие вещи, как malloc
и free
возможно в Python?
import ctypes
pointer = ctypes.malloc(10) # is this possible?
...
ctypes.free(pointer)
Я знаю, что это ужасная идея, поскольку Python собирает мусор, но я просто хочу знать, возможно ли это вообще.
Да, вы можете вызывать любую функцию C, экспортированную из DLL, включая DLL библиотеки времени выполнения C, при условии, что вы правильно предоставили функцию с помощью .argtypes
и .restype
:
import ctypes as ct
dll = ct.CDLL('msvcrt') # Windows C runtime
# void* malloc(size_t size);
dll.malloc.argtypes = ct.c_size_t,
dll.malloc.restype = ct.c_void_p
# void free(void* ptr);
dll.free.argtypes = ct.c_void_p,
dll.free.restype = None
ptr = dll.malloc(100)
dll.free(ptr)