[Rd] Issue with memory deallocation/fragmentation on systems which use glibc
Dmitriy Selivanov
selivanov.dmitriy at gmail.com
Sun Jul 9 12:12:29 CEST 2017
Dear R-devel mailing list and especially R-core, is there any chance to
receive feedback on issue I described in previous emails? I would consider
such behaviour as a bug.
As a work-around I've created small "clean-up" function:
malloc_trim_finalizer = function(e) {
res = NULL
if(R.version$os == "linux-gnu") {
flog.debug("Calling malloc_trim(0L) to trigger glibc to release
memory\n")
res = malloc_trim(0L)
}
res
}
And at the end of each function which produce a lot of intermediate small
objects I provide it to reg.finalizer():
some_function = function(...) {
# do some useful work
result = TRUE
# register finalizer
e = environment()
reg.finalizer(e, malloc_trim_finalizer)
return(result)
}
2017-06-22 11:12 GMT+04:00 Dmitriy Selivanov <selivanov.dmitriy at gmail.com>:
> A few additional details. According to Linux Programmer's Manual
>
> 1. http://man7.org/linux/man-pages/man3/mallopt.3.html
> 2. http://man7.org/linux/man-pages/man3/malloc_trim.3.html
>
> And if I understood everything correctly `free` could trigger
> `malloc_trim` based on value of several environment variables -
> MALLOC_TOP_PAD_ and MALLOC_TRIM_THRESHOLD_. However setting them as low as
> 1 or 0 doesn't have any effect (but as I wrote in previous email manual
> call of `malloc_trim` helps to release memory).
>
--
Regards
Dmitriy Selivanov
[[alternative HTML version deleted]]
More information about the R-devel
mailing list