Что касается интерфейса буфера в Python
Я довольно запутался с термином "интерфейс буфера" в Python. что значит сказать, что "объект python, демонстрирующий его основную структуру памяти" может кто-то объяснить на примере. Заранее спасибо
1 ответ
"Базовая структура памяти" относится к последовательности октетов, которые составляют объект в памяти компьютера. Например, когда вы создаете строку "abc"
, Python должен зарезервировать как минимум 3 байта памяти и хранить буквы a
, b
, а также c
, Если память является смежной (как в случае со строками), ее адрес и размер могут быть переданы любому фрагменту кода C, который хочет проверить его, не проходя через издержки Python str
тип.
Полезным примером является array
тип. Массив - это последовательность, которая работает почти так же, как список Python, с той разницей, что она содержит однотипные элементы - вы можете иметь массив целых чисел и массив чисел с плавающей запятой, но вы не можете смешивать их. Преимущество заключается в том, что массивы данных максимально эффективно упаковывают данные, сохраняя их в плоском массиве C. Этот массив предоставляется через интерфейс буфера - он позволяет запрашивать точную позицию в памяти и размер базового массива C и передавать его в некоторую функцию C, которая будет эффективно инициализировать его или записывать на диск. numpy
Числовой пакет построен вокруг такого рода обмена данными между Python и C (и даже FORTRAN), для чего они расширили буферный протокол, и некоторые из этих расширений превратили его в Python 3.
mmap
Объект, который предоставляет интерфейс Python для функциональности отображения памяти на уровне ОС, также предоставляет интерфейс буфера. Это позволяет коду C, который должен эффективно обращаться к памяти, такой как re
модуль, также для работы с отображенными в память регионами.