summaryrefslogtreecommitdiffstats
path: root/Objects/obmalloc.c
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2002-04-13 08:29:14 (GMT)
committerTim Peters <tim.peters@gmail.com>2002-04-13 08:29:14 (GMT)
commit0e871188e8cd9a4e41be7c734e250bfce2d92d56 (patch)
treec7ef141919fceb1f741a27825ceafb093c546021 /Objects/obmalloc.c
parentb7ba7433126bff12dd638f11f831fa7bfd0bbf4a (diff)
downloadcpython-0e871188e8cd9a4e41be7c734e250bfce2d92d56.zip
cpython-0e871188e8cd9a4e41be7c734e250bfce2d92d56.tar.gz
cpython-0e871188e8cd9a4e41be7c734e250bfce2d92d56.tar.bz2
_PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Added code to call this when PYMALLOC_DEBUG is enabled, and envar PYTHONMALLOCSTATS is set, whenever a new arena is obtained and once late in the Python shutdown process.
Diffstat (limited to 'Objects/obmalloc.c')
-rw-r--r--Objects/obmalloc.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c
index 1371141..aef6b9f 100644
--- a/Objects/obmalloc.c
+++ b/Objects/obmalloc.c
@@ -448,6 +448,11 @@ new_arena(void)
if (bp == NULL)
return NULL;
+#ifdef PYMALLOC_DEBUG
+ if (Py_GETENV("PYTHONMALLOCSTATS"))
+ _PyObject_DebugMallocStats();
+#endif
+
/* arenabase <- first pool-aligned address in the arena
nfreepools <- number of whole pools that fit after alignment */
arenabase = bp;
@@ -1216,7 +1221,7 @@ printone(const char* msg, ulong value)
/* Print summary info to stderr about the state of pymalloc's structures. */
void
-_PyObject_DebugDumpStats(void)
+_PyObject_DebugMallocStats(void)
{
uint i;
const uint numclasses = SMALL_REQUEST_THRESHOLD >> ALIGNMENT_SHIFT;
@@ -1245,8 +1250,6 @@ _PyObject_DebugDumpStats(void)
fprintf(stderr, "Small block threshold = %d, in %u size classes.\n",
SMALL_REQUEST_THRESHOLD, numclasses);
- fprintf(stderr, "pymalloc malloc+realloc called %lu times.\n",
- serialno);
for (i = 0; i < numclasses; ++i)
numpools[i] = numblocks[i] = numfreeblocks[i] = 0;
@@ -1312,6 +1315,7 @@ _PyObject_DebugDumpStats(void)
quantization += p * ((POOL_SIZE - POOL_OVERHEAD) % size);
}
fputc('\n', stderr);
+ (void)printone("# times object malloc called", serialno);
PyOS_snprintf(buf, sizeof(buf),
"%u arenas * %d bytes/arena", narenas, ARENA_SIZE);
@@ -1320,12 +1324,12 @@ _PyObject_DebugDumpStats(void)
fputc('\n', stderr);
total = printone("# bytes in allocated blocks", allocated_bytes);
+ total += printone("# bytes in available blocks", available_bytes);
PyOS_snprintf(buf, sizeof(buf),
"%u unused pools * %d bytes", numfreepools, POOL_SIZE);
total += printone(buf, (ulong)numfreepools * POOL_SIZE);
- total += printone("# bytes in available blocks", available_bytes);
total += printone("# bytes lost to pool headers", pool_header_bytes);
total += printone("# bytes lost to quantization", quantization);
total += printone("# bytes lost to arena alignment", arena_alignment);