delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/01/24/18:47:52

From: bierhals AT stud DOT uni-hannover DOT de (Andreas Bierhals)
Newsgroups: comp.os.msdos.djgpp
Subject: Memory leaks - how do I detect them?
Date: Sat, 24 Jan 1998 22:40:15 GMT
Organization: RRZN - Newsserver
Lines: 86
Message-ID: <34ca6604.28305820@news.rrzn.uni-hannover.de>
NNTP-Posting-Host: h14.stud.uni-hannover.de
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

Hello, 

I am working on a larger numerical fit program in c++/djgpp-v2 
which features a scripting language 
for user defined output of calculated results.
This requires numerous memory allocations using new/delete
in order to construct object trees, variable stacks etc.

However, I am suspecting the program to have memory leaks and
therefore used the functions

            _go32_dpmi_remaining_virtual_memory()
and    _go32_dpmi_remaining_physical_memory()

(as suggested in this NG before)
to show the free memory before and after the construction and
destruction of my object tree. 
While searching for the memory leaks (without success, yet) 
a problem occured, which can be illustrated with the following test 
program:

// File: test.cc
#include<stdio.h>
#include<dpmi.h>

void showmem(void) {
  printf("Physical Mem.: %12i   Virtual Mem.: %12i\n",
    _go32_dpmi_remaining_physical_memory(),
    _go32_dpmi_remaining_virtual_memory() );
}

main() {
  int *array;

  showmem();
  array = new int[100000];
  showmem();
  delete[] array;
  showmem();
  return 0;
}

This produced the following output
(in a DOS-box under Win95 with about 10 MB of dpmi memory enabled):

  E:\CPROGS\test>gcc  test.cc

  E:\CPROGS\test>test
  Physical Mem.:     10092544   Virtual Mem.:     10092544
  Physical Mem.:      9502720   Virtual Mem.:      9502720
  Physical Mem.:      9502720   Virtual Mem.:      9502720

  E:\CPROGS\test>go32-v2
  go32/v2 version 2.0 built Aug 12 1996 22:27:23
  Usage: go32 coff-image [args]
  Rename this to go32.exe only if you need a go32 that can run v2
binaries as
   well as v1 binaries (old makefiles).  Put ahead of the old go32 in
your PATH
   but do not delete your old go32 - leave it in the PATH after this
one.
  Set GO32_V2_DEBUG=y in the environment to get verbose output.

  DPMI memory available: 10239 Kb
  DPMI swap space available: 0 Kb

In the FAQ Chapter 15.x there is mentioned, that free / delete will
probably not affect the result of
_go32_dpmi_remaining_physical_memory(), because the 
DJGPP library functions don't release the free'd block back
to the system memory.
My questions are:

- Does this also apply for _go32_dpmi_remaining_virtual_memory() ?
- How do I really get the total amount of free memory using
  the functions in dpmi.h ?
- Are there any other methods/tools available,
   which provide an effective search for memory leaks?

(Besides: I used a DJGPP-V2 version which I just (today) have
 downloaded using the zip-picker from www.delorie.com).

Many thanks for help.


      Andreas Bierhals

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019