Skip to content
Prev 36616 / 63421 Next

Memory allocation in C/C++ vs R?

Simon,

Just to be sure that I understand, are you suggesting that the R-safe way to do
things is to not use STL, and to not use C++ memory management and
exception handling? How can you leave a function in an irregular way without
triggering a seg fault or something like that, in which case there is no chance
for recovery anyway?

In my experience the C++ exception stack seems to
unwind properly before returning to R when there is an exception, and memory
that is allocated by C++ functions seems to maintain its integrity and does
not interfere with R's memory management.

It would be helpful if you could specify what kind of interference you
are referring to here between C++ exception handling and R's error
handling, and why STL is dangerous and best avoided in R. I have
used STL with R for a long time and have experienced no problems.

The fact that R has a C main may be problematic because C++ static
initializers may not be called properly, but the fact that packages are
usually loaded dynamically complicates this picture. The dynamic
library itself may take care of calling the static initializers (I'm not
sure about this, and this is probably OS-dependent). One possible
work-around would be to compile the first few lines (a stub) of
R main using the C++ compiler, leaving everything else as is
and compiled using the C compiler (at least until CXXR is widely
available).

Since C++ (and STL) are very popular it would be helpful for developers
to have a better idea of the benefits and risks of using these tools
with R.

Thanks,
Dominick

On Fri, Apr 30, 2010 at 9:00 AM, Simon Urbanek
<simon.urbanek at r-project.org> wrote: