2013-07-05 4 views

ответ

3

«Базовая структура памяти» относится к последовательности октетов, которые составляют объект в памяти компьютера. Например, когда вы создаете строку "abc", Python должен зарезервировать не менее 3 байтов памяти и хранить буквы a, b и c. Если память смежная (как и в случае с строками), ее адрес и размер могут быть передается на любой фрагмент кода C, который хочет его проверить, не пройдя через служебные данные типа Python str.

Полезным примером является тип array. Массив - это последовательность, которая работает так же, как и список Python, с той разницей, что она содержит элементы с одним типом - вы можете иметь массив int и массив поплавков, но вы не можете их смешивать. Преимущество состоит в том, что массивы упаковывают данные как можно более эффективно, сохраняя их в плоском массиве C. Этот массив отображается через интерфейс буфера - он позволяет запросить точную позицию и размер ячейки лежащего в основе массива C и передать ее некоторой функции C, которая будет эффективно инициализировать ее или записать ее на диск. Цифровой пакет numpy построен вокруг такого обмена данными между Python и C (и даже FORTRAN), для которого они расширили буферный протокол, а некоторые из этих расширений превратили его в Python 3.

Объект mmap, который обеспечивает интерфейс Python для функциональности отображения памяти на уровне OS, также предоставляет интерфейс буфера. Это позволяет C-коду, который должен эффективно обращаться к памяти, такой как модуль re, также работать с областями с отображением памяти.

+0

Означает ли это, что каждый объект python имеет эквивалентное представление C, которое используется интерпретатором python для обработки. и мы можем получить доступ к этому представлению C для объектов, поддерживающих интерфейс буфера – user634615

+2

@ user634615 Каждый объект Python должен быть каким-то образом представлен в памяти, а так как CPython реализован на C, представление в конечном счете основано на типах данных C. В некоторых случаях (массивы) возможно и полезно разоблачить это представление вне Python. В других случаях это либо бесполезно (как со списками, которые являются внутренними массивами внутренних указателей на объекты Python), либо совершенно невозможно (как и с dicts, которые являются внутренне хеш-таблицами с довольно сложными структурами и как таковые не могут быть представлены как единый " буфер "). – user4815162342

+0

См. Также [это объяснение по Гвидо] (http://mail.python.org/pipermail/python-dev/2000-October/009974.html). – user4815162342

 Смежные вопросы

  • Нет связанных вопросов^_^