У меня есть родная библиотека, для которой естественный интерфейс будет включать передачу потенциально больших чисел. Я ожидаю, что половина будет < 32 бита; другой квартал < 64 бит; следующий восьмой < 128 бит - и т.д. Без ограничения фиксированной длины.
PyLong_FromUnsignedLongLong() и PyLong_AsUnsignedLongLong() были бы подходящими, если бы я мог ограничить значения, которые нужно поместить в один регистр.
PyLong_FromString() преодолевает это, но при нежелательном расходе требуется промежуточное представление. _PyLong_FromByteArray() и _PyLong_AsByteArray() смягчают эту стоимость (делая это промежуточное представление простым), но ведущее подчеркивание заставляет задуматься, может ли это привести к проблемам с переносимостью.
В longintrepr.h я нашел struct _longobject... который намекает, что это может быть способ напрямую взаимодействовать с внутренним представлением... хотя отсутствие подробной документации об этой структуре остается препятствием.
Какой подход приведет к оптимальной пропускной способности между Python и библиотекой? Есть ли документация, которую я пропустил?