A
asimorio
Hi folks,
Recently, I am investigatin a memory leak issue.
I have written a simple C++ program and a Perl script to test on UNIX
environment machine.
I do a for loop to new up 20 char of size 32768 bytes, then delete
them. Please see below:
//// part of the code start ////
for (i=0; i<20; i++) {
ptrA = new (std::nothrow) char[32768];
if (ptrA == 0)
return 1;
//chk size here
sprintf (strCmd, "perl csize.pl Rnd_%d_new_up_ptrA[%d]
%d",j, i, pid);
system(strCmd);
}
for (i=19; i>=0; i--) {
delete ptrA;
ptrA = NULL;
//chk size here
sprintf (strCmd, "perl csize.pl Rnd_%d_delete_ptrA[%d]
%d",j, i, pid);
system(strCmd);
}
for (i=0; i<20; i++) {
ptrB = new (std::nothrow) int(1863);
if (ptrB == 0)
return 1;
//chk size here
sprintf (strCmd, "perl csize.pl Rnd_%d_new_up_ptrB[%d]
%d",j, i, pid);
system(strCmd);
}
for (i=19; i>=0; i--) {
delete ptrB;
ptrB = 0;
//chk size here
sprintf (strCmd, "perl csize.pl Rnd_%d_delete_ptrB[%d]
%d",j, i, pid);
system(strCmd);
}
//// part of the code end ////
And, following is my log been captured:
Tue Jul 4 07:01:25 CDT 2006 1613824 prog_init
Tue Jul 4 07:01:25 CDT 2006 1646592 Rnd_0_new_up_ptrA[0]
Tue Jul 4 07:01:25 CDT 2006 1679360 Rnd_0_new_up_ptrA[1]
Tue Jul 4 07:01:25 CDT 2006 1712128 Rnd_0_new_up_ptrA[2]
Tue Jul 4 07:01:25 CDT 2006 1744896 Rnd_0_new_up_ptrA[3]
Tue Jul 4 07:01:25 CDT 2006 1777664 Rnd_0_new_up_ptrA[4]
Tue Jul 4 07:01:25 CDT 2006 1810432 Rnd_0_new_up_ptrA[5]
Tue Jul 4 07:01:25 CDT 2006 1843200 Rnd_0_new_up_ptrA[6]
Tue Jul 4 07:01:25 CDT 2006 1875968 Rnd_0_new_up_ptrA[7]
Tue Jul 4 07:01:25 CDT 2006 1908736 Rnd_0_new_up_ptrA[8]
Tue Jul 4 07:01:25 CDT 2006 1941504 Rnd_0_new_up_ptrA[9]
Tue Jul 4 07:01:25 CDT 2006 1974272 Rnd_0_new_up_ptrA[10]
Tue Jul 4 07:01:25 CDT 2006 2007040 Rnd_0_new_up_ptrA[11]
Tue Jul 4 07:01:25 CDT 2006 2039808 Rnd_0_new_up_ptrA[12]
Tue Jul 4 07:01:26 CDT 2006 2072576 Rnd_0_new_up_ptrA[13]
Tue Jul 4 07:01:26 CDT 2006 2105344 Rnd_0_new_up_ptrA[14]
Tue Jul 4 07:01:26 CDT 2006 2138112 Rnd_0_new_up_ptrA[15]
Tue Jul 4 07:01:26 CDT 2006 2170880 Rnd_0_new_up_ptrA[16]
Tue Jul 4 07:01:26 CDT 2006 2203648 Rnd_0_new_up_ptrA[17]
Tue Jul 4 07:01:26 CDT 2006 2236416 Rnd_0_new_up_ptrA[18]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_new_up_ptrA[19]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[19]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[18]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[17]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[16]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[15]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[14]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[13]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[12]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[11]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[10]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[9]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[8]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[7]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[6]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[5]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[4]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[3]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[2]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[1]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[0]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_new_up_ptrB[0]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_new_up_ptrB[1]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_new_up_ptrB[2]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[3]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[4]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[5]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[6]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[7]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[8]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[9]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[10]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[11]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[12]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[13]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[14]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[15]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[16]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[17]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_new_up_ptrB[18]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_new_up_ptrB[19]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[19]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[18]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[17]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[16]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[15]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[14]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[13]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[12]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[11]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[10]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[9]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[8]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[7]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[6]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[5]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[4]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[3]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[2]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[1]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[0]
I noticed that the process size only increase for the first 20 new-ups
for ptrA though I loop it for a few rounds.
Then, come to delete, the process size never decreased.
After that, for newing-up ptrB, there is no increasing for process size
also (is this normal?).
Finally, delete ptrB still maintain the process size without
decreasing.
I have 2 question here:
a) When 'delete' a new-up pointer in UNIX environment, the process size
will not be decreased?
b) From my log, why when newing-up my ptrB, there is no increasing
size?
Hope you guys understand my problem. Looking for UNIX or Memory expert
to kill my doubts.
Thanks.
regards,
Vynce
Recently, I am investigatin a memory leak issue.
I have written a simple C++ program and a Perl script to test on UNIX
environment machine.
I do a for loop to new up 20 char of size 32768 bytes, then delete
them. Please see below:
//// part of the code start ////
for (i=0; i<20; i++) {
ptrA = new (std::nothrow) char[32768];
if (ptrA == 0)
return 1;
//chk size here
sprintf (strCmd, "perl csize.pl Rnd_%d_new_up_ptrA[%d]
%d",j, i, pid);
system(strCmd);
}
for (i=19; i>=0; i--) {
delete ptrA;
ptrA = NULL;
//chk size here
sprintf (strCmd, "perl csize.pl Rnd_%d_delete_ptrA[%d]
%d",j, i, pid);
system(strCmd);
}
for (i=0; i<20; i++) {
ptrB = new (std::nothrow) int(1863);
if (ptrB == 0)
return 1;
//chk size here
sprintf (strCmd, "perl csize.pl Rnd_%d_new_up_ptrB[%d]
%d",j, i, pid);
system(strCmd);
}
for (i=19; i>=0; i--) {
delete ptrB;
ptrB = 0;
//chk size here
sprintf (strCmd, "perl csize.pl Rnd_%d_delete_ptrB[%d]
%d",j, i, pid);
system(strCmd);
}
//// part of the code end ////
And, following is my log been captured:
Tue Jul 4 07:01:25 CDT 2006 1613824 prog_init
Tue Jul 4 07:01:25 CDT 2006 1646592 Rnd_0_new_up_ptrA[0]
Tue Jul 4 07:01:25 CDT 2006 1679360 Rnd_0_new_up_ptrA[1]
Tue Jul 4 07:01:25 CDT 2006 1712128 Rnd_0_new_up_ptrA[2]
Tue Jul 4 07:01:25 CDT 2006 1744896 Rnd_0_new_up_ptrA[3]
Tue Jul 4 07:01:25 CDT 2006 1777664 Rnd_0_new_up_ptrA[4]
Tue Jul 4 07:01:25 CDT 2006 1810432 Rnd_0_new_up_ptrA[5]
Tue Jul 4 07:01:25 CDT 2006 1843200 Rnd_0_new_up_ptrA[6]
Tue Jul 4 07:01:25 CDT 2006 1875968 Rnd_0_new_up_ptrA[7]
Tue Jul 4 07:01:25 CDT 2006 1908736 Rnd_0_new_up_ptrA[8]
Tue Jul 4 07:01:25 CDT 2006 1941504 Rnd_0_new_up_ptrA[9]
Tue Jul 4 07:01:25 CDT 2006 1974272 Rnd_0_new_up_ptrA[10]
Tue Jul 4 07:01:25 CDT 2006 2007040 Rnd_0_new_up_ptrA[11]
Tue Jul 4 07:01:25 CDT 2006 2039808 Rnd_0_new_up_ptrA[12]
Tue Jul 4 07:01:26 CDT 2006 2072576 Rnd_0_new_up_ptrA[13]
Tue Jul 4 07:01:26 CDT 2006 2105344 Rnd_0_new_up_ptrA[14]
Tue Jul 4 07:01:26 CDT 2006 2138112 Rnd_0_new_up_ptrA[15]
Tue Jul 4 07:01:26 CDT 2006 2170880 Rnd_0_new_up_ptrA[16]
Tue Jul 4 07:01:26 CDT 2006 2203648 Rnd_0_new_up_ptrA[17]
Tue Jul 4 07:01:26 CDT 2006 2236416 Rnd_0_new_up_ptrA[18]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_new_up_ptrA[19]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[19]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[18]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[17]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[16]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[15]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[14]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[13]
Tue Jul 4 07:01:26 CDT 2006 2269184 Rnd_0_delete_ptrA[12]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[11]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[10]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[9]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[8]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[7]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[6]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[5]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[4]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[3]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[2]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[1]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_delete_ptrA[0]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_new_up_ptrB[0]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_new_up_ptrB[1]
Tue Jul 4 07:01:27 CDT 2006 2269184 Rnd_0_new_up_ptrB[2]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[3]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[4]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[5]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[6]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[7]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[8]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[9]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[10]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[11]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[12]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[13]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[14]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[15]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[16]
Tue Jul 4 07:01:28 CDT 2006 2269184 Rnd_0_new_up_ptrB[17]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_new_up_ptrB[18]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_new_up_ptrB[19]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[19]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[18]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[17]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[16]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[15]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[14]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[13]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[12]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[11]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[10]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[9]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[8]
Tue Jul 4 07:01:29 CDT 2006 2269184 Rnd_0_delete_ptrB[7]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[6]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[5]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[4]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[3]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[2]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[1]
Tue Jul 4 07:01:30 CDT 2006 2269184 Rnd_0_delete_ptrB[0]
I noticed that the process size only increase for the first 20 new-ups
for ptrA though I loop it for a few rounds.
Then, come to delete, the process size never decreased.
After that, for newing-up ptrB, there is no increasing for process size
also (is this normal?).
Finally, delete ptrB still maintain the process size without
decreasing.
I have 2 question here:
a) When 'delete' a new-up pointer in UNIX environment, the process size
will not be decreased?
b) From my log, why when newing-up my ptrB, there is no increasing
size?
Hope you guys understand my problem. Looking for UNIX or Memory expert
to kill my doubts.
Thanks.
regards,
Vynce