Эффективность памяти при представлении структуры C с помощью Cython - PullRequest
0 голосов
/ 27 ноября 2018

Я собираюсь использовать Cython для уменьшения требований к памяти для структуры данных, которая хранится в словаре Python в миллионы раз.Прямо сейчас я реализовал это как простой класс Cython в файле pyx:

cdef class FooBar:
    cdef public int x
    cdef public int y

    def __init__(self, x, y):
        self.x = x
        self.y = y

Я использую это в другом файле pyx для заполнения словаря Python с миллионами ключей:

python_dict[key] = FooBar(x, y)

Это обеспечивает значительную экономию памяти по сравнению с использованием именованного кортежа или другого решения Python, поскольку мой настоящий класс хранит 6 целых чисел и, таким образом, требует 40 байтов памяти (6 * 4 + 16 байтов для PyObject_Head).Тем не менее, 16-байтовые издержки являются существенными, и мой вопрос заключается в том, есть ли лучший способ сделать это.Насколько я понимаю, я не могу напрямую представить структуру C, поскольку это будет приведение типов к словарю Python, требующему гораздо больше памяти.Словарь python_dict широко используется в моем основном коде Python.Есть ли способ избежать издержек PyObject_Head без необходимости перенести большую часть реализации на чистый Cython / C?

...