| re: Tracking the "memory growth" of a process
"Generic Usenet Account" <usenet@sta.samsung.com> wrote in message
news:90e5135.0404051406.1d1c76b0@posting.google.co m...[color=blue]
> I have worked out a very simple method for tracking the "memory
> growth" of a process at run time. It involves a header file and a
> shell script.
>
> Here's the header file:
> ////////// Header File Begin ///////////////
> #ifndef _VIRTMEMINFO_H_
> #define _VIRTMEMINFO_H_
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <sys/types.h>
> #include <unistd.h>
>
> #define VMEM_BUF_SIZE 200
> #define VMEM_ENV_VAR "VMEM_ENV_VAR"
> #define CHK_SIZE \
> { \
> if(char* envVar=getenv(VMEM_ENV_VAR)) \
> { \
> char buf[VMEM_BUF_SIZE]; \
> sprintf(buf, "%s %s %d %d %d %d", envVar, \
> __FILE__, __LINE__, \
> getpid(), getppid(), getpagesize()); \
> system(buf); \
> } \
> }
>
> #endif //_VIRTMEMINFO_H_
> ////////// Header File End ///////////////
>
>
> Here's the shell script:
> ////////// Shell-script Begin ///////////////
> #!/bin/ksh
> #
> # $1: Filename
> # $2: Linenumber
> # $3: Process id
> # $4: Parent process id
> # $5: Page Size
>
> echo "File: $1, Line: $2"
> echo "Page size is $5"
> ps -elf | head -1; ps -elf | grep -w $3 | grep -w $4
> echo "\n\n"
> ////////// Shell-script End ///////////////
>
>
> By interspersing the above symbolic definition within my code, I am
> able to correctly track the memory "growth", but I am not able to see
> the memory "shrinkage", as the following coding example shows. Can
> someone explain why?
>
> ////////// Code-snippet Begin ///////////////
> #include "virtmeminfo.h"
>
> main()
> {
> CHK_SIZE
> char *buf = new char[100000];
> CHK_SIZE
> delete [] buf;
> CHK_SIZE
> }
> ////////// Code-snippet End ///////////////
>
> Regards,
> Bhat[/color]
I don't think that there is any requirement that deleting objects or
otherwise de-allocating memory should cause the operating system to reclaim
that memory immediately. As far as I now, it may do so immediately, or
if/when needed by other processes, or after the program exits. I'm pretty
sure it's operating system dependent (and possibly implementation dependent
as well).
-Howard |