Если большой двоичный объект предполагается сохранить в течение одного сеанса R, то было бы более естественным создать на уровне C внешний указатель и вернуть его пользователю. Это описано в Запись R расширений , в разделе 5.13 .
Одним из ограничений этого подхода является то, что внешний указатель не сериализуется, поэтому не сохраняется на диск или, например, не возвращается из параллельного задания. Это часто подходит, когда большой двоичный объект является ссылкой на структуру данных, которая имеет смысл только в контексте, в котором он был создан (например, дескриптор файла), но в меньшей степени, если это статическая структура данных. В этом случае может быть уместным сохранение данных в виде RAWSXP, как правило, в виде слота или элемента класса S3 или S4 с методами print / show, чтобы скрыть подробности от пользователя. Возможно, недостатком является то, что RAWSXP выделяется и управляется R, например, при условии сбора мусора, тогда как содержимое внешнего указателя, вероятно, будет распределяться более напрямую через Calloc
и Free
.