Выделение пространства памяти из python3 и передача указателя на C - PullRequest
2 голосов
/ 09 июля 2020

Я создал библиотеку, состоящую из python слоя и слоя C ++. На уровне C ++ у меня есть большой кусок памяти, который мне нужно сохранить в куче, поэтому этот фрагмент должен выделяться динамически во время компиляции.

Я хочу сделать этот кусок память настраивается со стороны python. Есть ли способ динамически выделять пространство памяти из python и передавать указатель на слой C ++?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Вы можете использовать библиотеку ctypes для выполнения вызовов DLL / общих библиотек.

Windows:

import ctypes
dwFlags = ctypes.c_int(0x00000008) # HEAP_ZERO_MEMORY
szSize = 256 # Size of the area you want to allocate

addr = ctypes.windll.kernel32.HeapAlloc(ctypes.windll.kernel32.GetProcessHeap(), ctypes.c_int(dwFlags), ctypes.c_int(szSize))

Теперь переменная addr содержит адрес выделенной памяти

0 голосов
/ 09 июля 2020

Используйте ctypes byref или указатель

для динамического выделения памяти, вы можете создать переменную или массив в Python (желательно использовать типы данных, предоставленные ctypes), затем вы можете передать указатель на слой C ++ через функция или около того

см .: https://docs.python.org/3/library/ctypes.html#passing -pointers-or-pass-parameters-by-reference

...