[Rcpp-devel] Incomplete Heap memory freeing under R
rosterma at abo.fi
rosterma at abo.fi
Thu Mar 31 21:15:11 CEST 2016
I have been working on connections between R and my computational
platform on Linux. I have designed a bridge function in C++ using
RInside and the connection seems to work as expected now. However, I
have a question regarding the heap memory usage.
First, take a look at the Valgrind report for a short run without any
R-connections in the executable:
==13263== Memcheck, a memory error detector
==13263== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==13263== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==13263== Command: ./supergha stoxx
==13263== Parent PID: 1
==13263==
==13263==
==13263== HEAP SUMMARY:
==13263== in use at exit: 0 bytes in 0 blocks
==13263== total heap usage: 81,741 allocs, 81,741 frees, 45,942,809
bytes allocated
==13263==
==13263== All heap blocks were freed -- no leaks are possible
==13263==
==13263== For counts of detected and suppressed errors, rerun with: -v
==13263== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 6)
Next, take a look at the Valgrind report with exactly the same run, but
with <RInside.h> included in a h-file. Furthermore, I define a C++ class
for the communication between C++ and R in the same h-file. However,
this class is never used in the program. The only thing connecting the
program to R is the preprocessor directive #include <RInside.h>. No
R-computations at all. No new allocations in the code. No embedded R-calls:
==13875== Memcheck, a memory error detector
==13875== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==13875== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==13875== Command: ./supergha stoxx
==13875== Parent PID: 1
==13875==
==13875==
==13875== HEAP SUMMARY:
==13875== in use at exit: 8 bytes in 1 blocks
==13875== total heap usage: 81,767 allocs, 81,766 frees, 45,986,922
bytes allocated
==13875==
==13875== 8 bytes in 1 blocks are still reachable in loss record 1 of 1
==13875== at 0x4A06A2E: malloc (vg_replace_malloc.c:270)
==13875== by 0x33B08042B8: ??? (in /usr/lib64/libgomp.so.1.0.0)
==13875== by 0x33B080ED1A: ??? (in /usr/lib64/libgomp.so.1.0.0)
==13875== by 0x33B0805452: ??? (in /usr/lib64/libgomp.so.1.0.0)
==13875== by 0x33B0810A25: ??? (in /usr/lib64/libgomp.so.1.0.0)
==13875== by 0x33B0803E62: ??? (in /usr/lib64/libgomp.so.1.0.0)
==13875== by 0x7FF000449: ???
==13875== by 0x78786F7473006167: ???
==13875== by 0x6F723D52455354FF: ???
==13875== by 0x4C00616D72657472: ???
==13875== by 0x723D454D414E474E: ???
==13875== by 0x616D726574736E: ???
==13875==
==13875== LEAK SUMMARY:
==13875== definitely lost: 0 bytes in 0 blocks
==13875== indirectly lost: 0 bytes in 0 blocks
==13875== possibly lost: 0 bytes in 0 blocks
==13875== still reachable: 8 bytes in 1 blocks
==13875== suppressed: 0 bytes in 0 blocks
==13875==
==13875== For counts of detected and suppressed errors, rerun with: -v
==13875== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 6)
/home/aton6/rosterma/research/catsm/super_catsm_R/stoxx_50/valgrind_test>
Since my platform scales with tens of thousands of parallel processors
as I have demonstrated in numerous papers, I want to be sure that no
heap memory faults are included in the program for example through R
before invoking it in production runs.
--
Ralf Östermark
Ph.D(econ), Ph.D(pol)
Professor of Accounting and Optimization Systems
School of Business Economics at
Åbo Akademi University
20500 Åbo
Finland
More information about the Rcpp-devel
mailing list