R: Free memory allocated on the C++ side by 'MakeADFun'.

FreeADFun {TMB} | R Documentation

## Free memory allocated on the C++ side by `MakeADFun`.

### Description

Free memory allocated on the C++ side by `MakeADFun`.

### Usage

    FreeADFun(obj)

### Arguments

`obj` | Object returned by `MakeADFun`

### Details

An object returned by `MakeADFun` contains pointers to structures allocated on the C++ side. These are managed by R's garbage collector which for the most cases is sufficient. However, because the garbage collector is unware of the C++ object sizes, it may fail to release memory to the system as frequently as necessary. In such cases one can manually call `FreeADFun(obj)` to release the resources.

### Memory management

Memory allocated on the C++ side by `MakeADFun` is represented by external pointers. Each such pointer has an associated 'finalizer' (see `reg.finalizer`) that deallocates the external pointer when `gc()` decides the pointer is no longer needed. Deallocated pointers are recognized on the R side as external null pointers `<pointer: (nil)>`. This is important as it provides a way to prevent the finalizers from freeing pointers that have already been deallocated even if the deallocation C-code has been unloaded. The user DLL maintains a list of all external pointers on the C side. Three events can reduce the list:

- Garbage collection of an external pointer that is no longer needed (triggers corresponding finalizer).

- Explicit deallocation of external pointers using `FreeADFun()` (corresponding finalizers are untriggered but harmless).

- Unload/reload of the user's DLL deallocates all external pointers (corresponding finalizers are untriggered but harmless).

### Note

This function is normally not needed.

### Examples

    runExample("simple", thisR = TRUE)          ## Create 'obj'
    FreeADFun(obj)                              ## Free external pointers
    obj$fn()                                    ## Re-allocate external pointers

[Package TMB version 1.9.0 Index]