From: "Rafał Maj" Newsgroups: comp.os.msdos.djgpp Subject: memory reserve !!!!!!!!!!!!!!!!!!!! Date: Wed, 23 Aug 2000 16:32:47 +0200 Organization: Academic Computer Center CYFRONET AGH Lines: 50 Message-ID: <8o0n79$su$1@info.cyf-kr.edu.pl> NNTP-Posting-Host: d-94-53-25.cyfronet.krakow.pl X-Trace: info.cyf-kr.edu.pl 967041065 926 149.156.1.185 (23 Aug 2000 14:31:05 GMT) X-Complaints-To: news AT cyf-kr DOT edu DOT pl NNTP-Posting-Date: 23 Aug 2000 14:31:05 GMT X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.00.2615.200 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Hi, In my program I allocate all memory like this : MyClass *ptr; try { ptr = new MyClass( var1, var2); } catch (std::bad_alloc) { cMemoryManager->needed( sizeof(MyClass) ); } // thanks to drew AT Poohstick DOT ORG where cMemoryManager->needed(long SIZE) is function, with unloads SIZE bytes of data from memory. So now everything is fine - when program runs out of virtual memory, it automaticly unloads unnessesary data. BUT : some other functions (for example from libraries) are still allocating memory in old way - just using new. So when out-of-memory-error wil occur in library function (and not in my program) then ofcourse my cMemoryManager->needed function won't be called and program will crash. =========================== So I want new() operator to throw exceptions, not only when all memory is used, but when free memory is less then, for example 32Kb. HOW CAN I DO THIS ??? 1) I can't use any function like _go32_dpmi_get_free_memory... because they don't show real amount of free memory. 2)This solution : try { some_library_fun(); } catch (std::bad_alloc) { cMemoryManager->needed( 64*1024 ); } Isn't good because it's very *not* nice & It don't help if library function uses malloc() ============================== 3) This solution will probably work but I think it is not nice... what You think ? try { ptr = new MyClass( var1, var2); } catch (std::bad_alloc) { cMemoryManager->needed( sizeof(MyClass) ); } try { *TEST = new char[reserve_size]; } catch (std::bad_alloc) { cMemoryManager->needed(reserve_size); } delete TEST;