On 6 June 2017 at 17:06, Dirk Eddelbuettel wrote: | The general idea when working with R objects is that | | -- on the way in from R to the C++ functions we construct object such that | the existing memory (from R) is used; one example is how RcppArmadillo | uses the 'advanced' constructors of Armadillo allowing to operate | without copies; hence R managed memory is used while C++ functions are | called; in general this side of the conversion is the templates as<>() | converters; | | -- on the way back we use the *alloc functions from the C-level API of R to | construct objects that use memory from R's pool, once we return these | objects to R as SEXP they are indistinguishable to R from its own; these | are the wrap() functions (and I think we may make on occassion make "one | final copy" at his level, but I'd have to double-check).
Actually, let me rephrase: "in most cases not involving native R types" do we make one copy at the return. The general approach is iterator based, see internal/wrap.h. But there is a lot of template magic... Dirk | I haven't had a chance to look at what Wes is doing with Apache Arrow, and | what is happening with xtensor -- so thanks for getting the ball rolling. | | Dirk | | -- | http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org | _______________________________________________ | Rcpp-devel mailing list | Rcpp-devel@lists.r-forge.r-project.org | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel -- http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel