Add a malloc size histogram to the debugging malloc implementation
in mem2.c. (CVS 4490) FossilOrigin-Name: 3e51696cb878063e4ebfdcc2a61ba94c9bebdfe3
This commit is contained in:
parent
db2d286b59
commit
d2bb3278e0
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
|||||||
C Fix\sfor\sOMIT_AUTHORIZATION\sbuilds.\s(CVS\s4489)
|
C Add\sa\smalloc\ssize\shistogram\sto\sthe\sdebugging\smalloc\simplementation\nin\smem2.c.\s(CVS\s4490)
|
||||||
D 2007-10-15T07:08:44
|
D 2007-10-15T19:34:32
|
||||||
F Makefile.in 75b729d562e9525d57d9890ec598b38e1a8b02bc
|
F Makefile.in 75b729d562e9525d57d9890ec598b38e1a8b02bc
|
||||||
F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499
|
F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499
|
||||||
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
||||||
@ -103,7 +103,7 @@ F src/main.c 994a6b6914d91dc6dea5012667ec0a52e74d3bca
|
|||||||
F src/malloc.c de4e77fe70a9a0ac47a1c3a874422b107231bf31
|
F src/malloc.c de4e77fe70a9a0ac47a1c3a874422b107231bf31
|
||||||
F src/md5.c c5fdfa5c2593eaee2e32a5ce6c6927c986eaf217
|
F src/md5.c c5fdfa5c2593eaee2e32a5ce6c6927c986eaf217
|
||||||
F src/mem1.c 232075b7da8c9b7f23159bbda25c7407168ab9db
|
F src/mem1.c 232075b7da8c9b7f23159bbda25c7407168ab9db
|
||||||
F src/mem2.c 9c59519e471f858961fbdccd9543317bba1c5e58
|
F src/mem2.c 8651e5306c1d5c0a7ab91c027a653ced1ca3e6d6
|
||||||
F src/mutex.c 3259f62c2429967aee6dc112117a6d2f499ef061
|
F src/mutex.c 3259f62c2429967aee6dc112117a6d2f499ef061
|
||||||
F src/mutex.h 079fa6fe9da18ceb89e79012c010594c6672addb
|
F src/mutex.h 079fa6fe9da18ceb89e79012c010594c6672addb
|
||||||
F src/mutex_os2.c 7fe4773e98ed74a63b2e54fc557929eb155f6269
|
F src/mutex_os2.c 7fe4773e98ed74a63b2e54fc557929eb155f6269
|
||||||
@ -427,7 +427,7 @@ F test/table.test 13b1c2e2fb4727b35ee1fb7641fc469214fd2455
|
|||||||
F test/tableapi.test 92651a95c23cf955e92407928e640536402fa3cc
|
F test/tableapi.test 92651a95c23cf955e92407928e640536402fa3cc
|
||||||
F test/tclsqlite.test c7feea1985c3e8a1ed134ba342347d47fa762e43
|
F test/tclsqlite.test c7feea1985c3e8a1ed134ba342347d47fa762e43
|
||||||
F test/temptable.test 19b851b9e3e64d91e9867619b2a3f5fffee6e125
|
F test/temptable.test 19b851b9e3e64d91e9867619b2a3f5fffee6e125
|
||||||
F test/tester.tcl 913a808f05b0aed2fbb16481a423b1a5a118bdf0
|
F test/tester.tcl 0fea2ceef69678ee8b15d3dd64d29f659449a081
|
||||||
F test/thread001.test 8fbd9559da0bbdc273e00318c7fd66c162020af7
|
F test/thread001.test 8fbd9559da0bbdc273e00318c7fd66c162020af7
|
||||||
F test/thread002.test 2c4ad2c386f60f6fe268cd91c769ee35b3c1fd0b
|
F test/thread002.test 2c4ad2c386f60f6fe268cd91c769ee35b3c1fd0b
|
||||||
F test/thread1.test 776c9e459b75ba905193b351926ac4019b049f35
|
F test/thread1.test 776c9e459b75ba905193b351926ac4019b049f35
|
||||||
@ -581,7 +581,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
|
|||||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||||
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
||||||
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
||||||
P e756bc9b74ef357c088b3044527c41e6834ba1a2
|
P 260711a14d5ab2d7c9888c7c46c33a28a3da0415
|
||||||
R 2a362f0638262e15107e468de4d77838
|
R e7cd2dbd87cc55ed9709f416c29bb4b2
|
||||||
U danielk1977
|
U drh
|
||||||
Z 171613e0cdad61754450cbee9fe33dc0
|
Z b3fd55271c42d6d384286f4a414e866e
|
||||||
|
@ -1 +1 @@
|
|||||||
260711a14d5ab2d7c9888c7c46c33a28a3da0415
|
3e51696cb878063e4ebfdcc2a61ba94c9bebdfe3
|
29
src/mem2.c
29
src/mem2.c
@ -12,7 +12,7 @@
|
|||||||
** This file contains the C functions that implement a memory
|
** This file contains the C functions that implement a memory
|
||||||
** allocation subsystem for use by SQLite.
|
** allocation subsystem for use by SQLite.
|
||||||
**
|
**
|
||||||
** $Id: mem2.c,v 1.14 2007/10/03 08:46:45 danielk1977 Exp $
|
** $Id: mem2.c,v 1.15 2007/10/15 19:34:32 drh Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -84,6 +84,11 @@ struct MemBlockHdr {
|
|||||||
#define FOREGUARD 0x80F5E153
|
#define FOREGUARD 0x80F5E153
|
||||||
#define REARGUARD 0xE4676B53
|
#define REARGUARD 0xE4676B53
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Number of malloc size increments to track.
|
||||||
|
*/
|
||||||
|
#define NCSIZE 500
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** All of the static variables used by this module are collected
|
** All of the static variables used by this module are collected
|
||||||
** into a single structure named "mem". This is to keep the
|
** into a single structure named "mem". This is to keep the
|
||||||
@ -149,6 +154,13 @@ static struct {
|
|||||||
*/
|
*/
|
||||||
int disallow; /* Do not allow memory allocation */
|
int disallow; /* Do not allow memory allocation */
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Gather statistics on the sizes of memory allocations.
|
||||||
|
** sizeCnt[i] is the number of allocation attempts of i*4
|
||||||
|
** bytes. i==NCSIZE is the number of allocation attempts for
|
||||||
|
** sizes more than NCSIZE*4 bytes.
|
||||||
|
*/
|
||||||
|
int sizeCnt[NCSIZE];
|
||||||
|
|
||||||
} mem;
|
} mem;
|
||||||
|
|
||||||
@ -272,6 +284,11 @@ void *sqlite3_malloc(int nByte){
|
|||||||
sqlite3MemsysAlarm(nByte);
|
sqlite3MemsysAlarm(nByte);
|
||||||
}
|
}
|
||||||
nByte = (nByte+3)&~3;
|
nByte = (nByte+3)&~3;
|
||||||
|
if( nByte/8>NCSIZE-1 ){
|
||||||
|
mem.sizeCnt[NCSIZE-1]++;
|
||||||
|
}else{
|
||||||
|
mem.sizeCnt[nByte/8]++;
|
||||||
|
}
|
||||||
totalSize = nByte + sizeof(*pHdr) + sizeof(int) +
|
totalSize = nByte + sizeof(*pHdr) + sizeof(int) +
|
||||||
mem.nBacktrace*sizeof(void*) + mem.nTitle;
|
mem.nBacktrace*sizeof(void*) + mem.nTitle;
|
||||||
if( mem.iFail>0 ){
|
if( mem.iFail>0 ){
|
||||||
@ -440,6 +457,7 @@ void sqlite3_memdebug_dump(const char *zFilename){
|
|||||||
FILE *out;
|
FILE *out;
|
||||||
struct MemBlockHdr *pHdr;
|
struct MemBlockHdr *pHdr;
|
||||||
void **pBt;
|
void **pBt;
|
||||||
|
int i;
|
||||||
out = fopen(zFilename, "w");
|
out = fopen(zFilename, "w");
|
||||||
if( out==0 ){
|
if( out==0 ){
|
||||||
fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
|
fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
|
||||||
@ -459,6 +477,15 @@ void sqlite3_memdebug_dump(const char *zFilename){
|
|||||||
fprintf(out, "\n");
|
fprintf(out, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fprintf(out, "COUNTS:\n");
|
||||||
|
for(i=0; i<NCSIZE-1; i++){
|
||||||
|
if( mem.sizeCnt[i] ){
|
||||||
|
fprintf(out, " %3d: %d\n", i*8+8, mem.sizeCnt[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( mem.sizeCnt[NCSIZE-1] ){
|
||||||
|
fprintf(out, " >%3d: %d\n", NCSIZE*8, mem.sizeCnt[NCSIZE-1]);
|
||||||
|
}
|
||||||
fclose(out);
|
fclose(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
# This file implements some common TCL routines used for regression
|
# This file implements some common TCL routines used for regression
|
||||||
# testing the SQLite library
|
# testing the SQLite library
|
||||||
#
|
#
|
||||||
# $Id: tester.tcl,v 1.91 2007/09/01 09:02:54 danielk1977 Exp $
|
# $Id: tester.tcl,v 1.92 2007/10/15 19:34:32 drh Exp $
|
||||||
|
|
||||||
|
|
||||||
set tcl_precision 15
|
set tcl_precision 15
|
||||||
@ -203,6 +203,9 @@ proc finalize_testing {} {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
puts "All memory allocations freed - no leaks"
|
puts "All memory allocations freed - no leaks"
|
||||||
|
ifcapable memdebug {
|
||||||
|
sqlite3_memdebug_dump ./memusage.txt
|
||||||
|
}
|
||||||
}
|
}
|
||||||
puts "Maximum memory usage: [sqlite3_memory_highwater] bytes"
|
puts "Maximum memory usage: [sqlite3_memory_highwater] bytes"
|
||||||
foreach f [glob -nocomplain test.db-*-journal] {
|
foreach f [glob -nocomplain test.db-*-journal] {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user