G
Generic Usenet Account
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
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