Loading...
Searching...
No Matches
casacore::Memory Class Reference
casa package (libcasa_casa) » OS_module

More...

`#include <Memory.h>`

## Static Public Member Functions

static void | releaseMemory ()
| Attempt to release memory which has been assigned but not allocated.
static void | setMemoryOptions ()
| setMemoryOptions and setMemoryOption are typically front ends for mallopt which lets the user control some memory allocation parameters.
static int | setMemoryOption (int, int)

## Detailed Description

Memory related information and utilities. use visibility=export>

### Review Status

Reviewed By:
  rmarson
Date Reviewed:
  1997/11/12
Test programs:
  tMemory

### Prerequisite

- General knowledge of C/C++ memory allocation issues.

### Synopsis

This class should generally not be used by general application programmers. Instead you should use the memory information available in the AppInfo class.

This class reports on the dynamic ("heap") memory used by this process, and it can attempt to release some of that memory back to the operating system. The class reports on allocated memory, which is memory that the process has actually requested, typically via new, but also via malloc. The number might be somewhat larger than actually requested by the programmer to account for overhead and alignment considerations. The class also reports assigned memory, which is the total memory that the process has been given, not all of which has been allocated by the programmer. Typically this results from memory which has been deleted by the programmer, but has not been released to the OS on the assumption that it might be needed again. (Getting and releasing memory to the OS can be expensive).

At present, the values for allocated and assigned memory are obtained via the mallinfo() call, usually defined in malloc.h. This call seems to be adequately portable for Unix. Another alternative would be to replace global operators new and delete for systems that do not have mallinfo().

The member function releaseMemory() on some system will attempt to return assigned but unallocated memory to the OS. If the compilation system cannot automatically determine how to do this (at present it only recognizes Linux systems), you can you this function by setting the preprocessor symbol AIPS_RELEASEMEM to a C++ statement which will release memory to the OS. For example, if you are using GNU malloc you could set it to malloc_trim(0). Note that releaseMemory() might be a no-op on many systems, and that calling it might be expensive so it should not be called in tight-loops.

Note that this class does not use any Casacore facilities and does not cause any Casacore code to be linked in to your executable.

### Example

We could attempt to return memory to the OS when we are wasting a lot of memory as follows.

if (Memory::assignedMemoryInBytes() - Memory::allocatedMemoryInBytes() >
1024*1024) {
Memory::releaseMemory(); // Attempt to release if more than 1M "wasted"
}
casacore::Memory::releaseMemory
static void releaseMemory()
Attempt to release memory which has been assigned but not allocated.

### Motivation

At run time we need to be able to make decisions about whether we should keep things in memory or about whether we should do I/O (e.g. use an Array or a PagedArray).

### To Do

- We might some day want to put actual allocation/deallocation functions in here if the mallinfo() interface turns out to not be portable.

Definition at line 107 of file Memory.h.

## Member Function Documentation

## releaseMemory()

void casacore::Memory::releaseMemory | ( |  | ) |

static

Attempt to release memory which has been assigned but not allocated.

On many systems this will be a no-op, and even on systems in which it does something the amount of reclaimed memory cannot be specified. Since this function may be somewhat expensive to call it should not be called too often.

## setMemoryOption()

int casacore::Memory::setMemoryOption | ( | int | ,
|  | int | )

static

## setMemoryOptions()

void casacore::Memory::setMemoryOptions | ( |  | ) |

static

setMemoryOptions and setMemoryOption are typically front ends for mallopt which lets the user control some memory allocation parameters.

setMemoryOptions is intended to be called only once at the start of a program while setMemoryOption could be called where desired (but see mallopt man page for possible side effects). Note: these two functions were added to address in a general way a memory fragmentation problem encountered on by the MIPSpro C++ compiler on the SGI.

The documentation for this class was generated from the following file:

- casa/OS/Memory.h