From: eap Date: Mon, 24 Sep 2007 13:51:42 +0000 (+0000) Subject: PAL16631 (SALOME crash after a mesh computation failed due to lack of memory) X-Git-Tag: V4_1_0a1~13 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=f6615d707400eb37843d9611f769eae722f051a7;p=modules%2Fsmesh.git PAL16631 (SALOME crash after a mesh computation failed due to lack of memory) --- diff --git a/src/SMDS/SMDS_MemoryLimit.cxx b/src/SMDS/SMDS_MemoryLimit.cxx new file mode 100644 index 000000000..e31a9a498 --- /dev/null +++ b/src/SMDS/SMDS_MemoryLimit.cxx @@ -0,0 +1,47 @@ +// File : SMDS_MemoryLimit.cxx +// Created : Fri Sep 21 17:16:42 2007 +// Author : Edward AGAPOV (eap) + +// Executable to find out a lower RAM limit (MB), i.e. at what size of freeRAM +// reported by sysinfo, no more memory can be allocated. +// This is not done inside a function of SALOME because allocated memory is not returned +// to the system + +#ifndef WIN32 +#include +#endif + +#ifdef _DEBUG_ +#include +#endif + +int main (int argc, char ** argv) { +#ifndef WIN32 + struct sysinfo si; + int err = sysinfo( &si ); + if ( err ) + return -1; + unsigned long freeRamKb = ( si.freeram * si.mem_unit ) / 1024; + + const unsigned long stepKb = 8; // less nb leads to hung up on Mandriva2006 without swap + // (other platforms not tested w/o swap) + + unsigned long nbSteps = freeRamKb / stepKb * 2; + try { + while ( nbSteps-- ) { + new char[stepKb*1024]; + err = sysinfo( &si ); + if ( !err ) + freeRamKb = ( si.freeram * si.mem_unit ) / 1024; + } + } catch (...) {} + +// #ifdef _DEBUG_ +// std::cout << freeRamKb / 1024 << std::endl; +// #endif + return freeRamKb / 1024; + +#endif + + return -1; +}