diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index ee1f2b23a6d..a906cde2d11 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -396,16 +396,17 @@ always available. .. function:: getallocatedblocks() Return the number of memory blocks currently allocated by the interpreter, - regardless of their size. This function is mainly useful for debugging - small memory leaks. Because of the interpreter's internal caches, the - result can vary from call to call; you may have to call - :func:`_clear_type_cache()` to get more predictable results. + regardless of their size. This function is mainly useful for tracking + and debugging memory leaks. Because of the interpreter's internal + caches, the result can vary from call to call; you may have to call + :func:`_clear_type_cache()` and :func:`gc.collect()` to get more + predictable results. + + If a Python build or implementation cannot reasonably compute this + information, :func:`getallocatedblocks()` is allowed to return 0 instead. .. versionadded:: 3.4 - .. impl-detail:: - Not all Python implementations may be able to return this information. - .. function:: getcheckinterval() diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index 055592ba070..41f1439741b 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -7,6 +7,7 @@ import operator import codecs import gc +import sysconfig # count the number of test runs, used to create unique # strings to intern in test_intern() @@ -616,9 +617,13 @@ def test_debugmallocstats(self): "sys.getallocatedblocks unavailable on this build") def test_getallocatedblocks(self): # Some sanity checks + with_pymalloc = sysconfig.get_config_var('WITH_PYMALLOC') a = sys.getallocatedblocks() self.assertIs(type(a), int) - self.assertGreater(a, 0) + if with_pymalloc: + self.assertGreater(a, 0) + else: + self.assertEqual(a, 0) try: # While we could imagine a Python session where the number of # multiple buffer objects would exceed the sharing of references, diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c index c82c978e4da..bbe2805bd16 100644 --- a/Objects/obmalloc.c +++ b/Objects/obmalloc.c @@ -1316,6 +1316,13 @@ PyObject_Free(void *p) { PyMem_FREE(p); } + +Py_ssize_t +_Py_GetAllocatedBlocks(void) +{ + return 0; +} + #endif /* WITH_PYMALLOC */ #ifdef PYMALLOC_DEBUG