2016-11-20 2 views
0

Я хочу передать адрес буфера питона массива в другое приложение или C Функцию,питон адрес массива пропуск C

buf = array("d", range(10)) 
addr, count = buf.buffer_info() 
print "Address of buffer ", addr 

выход:

Address of buffer 0x28a3ab0 

Является ли это адрес фактической памяти адрес первого элемента массива buf?

Это аналогичный адрес, как в C, адрес первого элемента buf?

Если нет, то как я могу объявить буфер в python и передать его адрес функции c и использовать его значение и адресацию как массивы C?

, если этот адрес фактический адрес памяти может я использовать этот адрес в memcpy() функции в С.

ответ

0

Как the documentation писал, что это нормально, чтобы использовать его в качестве адреса. Но подумайте об использовании buffer protocol в соответствии с ПРИМЕЧАНИЕ.

Возвращает кортеж (адрес, длина), дающий текущий адрес памяти, и длину в элементах буфера, используемого для хранения содержимого массива. Размер буфера памяти в байтах может быть вычислен как array.buffer_info() 1 * array.itemsize. Это редко полезно при работе с низкоуровневыми (и небезопасными) интерфейсами ввода-вывода , которым требуются адреса памяти, такие как определенные операции ioctl(). Возвращенные числа действительны до тех пор, пока существует массив, и к нему применяются операции изменения длины .

Примечание При использовании объектов массива из кода, написанного на C или C++ (только способ эффективно использовать эту информацию), то имеет смысл использовать интерфейс буфера, поддерживаемый объектами массива. Этот метод поддерживается для обратной совместимости и его следует избегать в новом коде . Интерфейс буфера документирован в Buffer Protocol.