.. 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.
- .. versionadded:: 3.4
+ If a Python build or implementation cannot reasonably compute this
+ information, :func:`getallocatedblocks()` is allowed to return 0 instead.
- .. impl-detail::
- Not all Python implementations may be able to return this information.
+ .. versionadded:: 3.4
.. function:: getcheckinterval()
import operator
import codecs
import gc
+import sysconfig
# count the number of test runs, used to create unique
# strings to intern in test_intern()
"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,