Hi all.
There was an unusual problem noted on the
news:comp.unix.tru64. A
process allocates memory, dynamically. This causes VSIZE of the process
to increase. When the memory is freed, the VSZIE doesn't decrease. The
reported behaviour from 3.2 was that it would decrease.
I have included the original post. I have tested this on 4.0D+PK6 and
4.0F+PK3, it shows the same dreaded behaviour.
The test program I used was:
#include <stdio.h>
#include <stdlib.h>
#define MB (1024*1024)
void main(void)
{
char *mem_block1;
char *mem_block2;
mem_block1 = (char *)malloc(50*MB);
printf( "Should be at 50M+\n" );
getchar(); /* give chance to run ps */
mem_block2 = (char *)malloc(50*MB);
printf( "Should be at 100M+\n" );
getchar(); /* give chance to run ps */
free(mem_block2);
printf( "Should be at 50M+ again\n" );
getchar(); /* give chance to run ps */
}
Compiled with "cc -o test.exe test.c"
Inspection with "ps aux | grep test.exe | grep -v grep"
Nix.
--
True programmers never die, they just branch to an odd address.
attached mail follows:
This is a historic question.
We upgraded from Tru64 3.2G to Tru64 4.0F some time ago. When we ran
our application on 4.0F we started getting "Low swap space" warnings
that we did not get under 3.2G.
Looking at the VSIZE column of the 'ps' output I noticed that under 4.0F
memory allocated to a process is not released back to the operating
system - i.e. VSIZE only ever increases. Under 3.2G the
VSIZE fluctuates up and down.
I wrote the following simple test C program:
#include <stdio.h>
#include <stdlib.h>
#define MB (1024*1024)
void main(void)
{
char *mem_block1;
char *mem_block2;
mem_block1 = (char *)malloc(50*MB);
mem_block2 = (char *)malloc(50*MB);
getchar(); /* give chance to run ps */
free(mem_block2);
get_char(); /* give chance to run ps */
}
Under 4.0F the VSIZE is approx 100Mb + some process overhead
Under 3.2G the VSIZE is approx 50MB + some process overhead.
Unfortunately I no longer have access to the 3.2G box.
Does anyone know for certain if the memory management was changed from
3.2, in which malloc()/free() off-loaded all memory management to the
kernel, and 4.0F which appears to expect the user processes to manage
free space with malloc()/free()? I'm guessing this change (if I'm
right) was made for kernel efficiency - for example, less scanning of
free lists, less swap allocation/deallocation activity, etc.
Regards,
Hugh Patrick
Received on Fri Nov 17 2000 - 12:01:30 NZDT