mirror of https://github.com/python/cpython
Issue #23034: The output of a special Python build with defined COUNT_ALLOCS,
SHOW_ALLOC_COUNT or SHOW_TRACK_COUNT macros is now off by default. It can be re-enabled using the "-X showalloccount" option. It now outputs to stderr instead of stdout.
This commit is contained in:
parent
6c94d10a19
commit
7e160ce356
|
@ -397,6 +397,8 @@ Miscellaneous options
|
||||||
stored in a traceback of a trace. Use ``-X tracemalloc=NFRAME`` to start
|
stored in a traceback of a trace. Use ``-X tracemalloc=NFRAME`` to start
|
||||||
tracing with a traceback limit of *NFRAME* frames. See the
|
tracing with a traceback limit of *NFRAME* frames. See the
|
||||||
:func:`tracemalloc.start` for more information.
|
:func:`tracemalloc.start` for more information.
|
||||||
|
* ``-X showalloccount`` to enable the output of the total count of allocated
|
||||||
|
objects for each type (only works when built with ``COUNT_ALLOCS`` defined);
|
||||||
|
|
||||||
It also allows passing arbitrary values and retrieving them through the
|
It also allows passing arbitrary values and retrieving them through the
|
||||||
:data:`sys._xoptions` dictionary.
|
:data:`sys._xoptions` dictionary.
|
||||||
|
@ -410,6 +412,9 @@ Miscellaneous options
|
||||||
.. versionadded:: 3.4
|
.. versionadded:: 3.4
|
||||||
The ``-X showrefcount`` and ``-X tracemalloc`` options.
|
The ``-X showrefcount`` and ``-X tracemalloc`` options.
|
||||||
|
|
||||||
|
.. versionadded:: 3.6
|
||||||
|
The ``-X showalloccount`` option.
|
||||||
|
|
||||||
|
|
||||||
Options you shouldn't use
|
Options you shouldn't use
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
|
@ -646,6 +646,16 @@ Porting to Python 3.6
|
||||||
This section lists previously described changes and other bugfixes
|
This section lists previously described changes and other bugfixes
|
||||||
that may require changes to your code.
|
that may require changes to your code.
|
||||||
|
|
||||||
|
Changes in 'python' Command Behavior
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
* The output of a special Python build with defined ``COUNT_ALLOCS``,
|
||||||
|
``SHOW_ALLOC_COUNT`` or ``SHOW_TRACK_COUNT`` macros is now off by
|
||||||
|
default. It can be re-enabled using the ``-X showalloccount`` option.
|
||||||
|
It now outputs to ``stderr`` instead of ``stdout``.
|
||||||
|
(Contributed by Serhiy Storchaka in :issue:`23034`.)
|
||||||
|
|
||||||
|
|
||||||
Changes in the Python API
|
Changes in the Python API
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,11 @@ What's New in Python 3.6.0 alpha 3
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #23034: The output of a special Python build with defined COUNT_ALLOCS,
|
||||||
|
SHOW_ALLOC_COUNT or SHOW_TRACK_COUNT macros is now off by default. It can
|
||||||
|
be re-enabled using the "-X showalloccount" option. It now outputs to stderr
|
||||||
|
instead of stdout.
|
||||||
|
|
||||||
- Issue #27443: __length_hint__() of bytearray itearator no longer return
|
- Issue #27443: __length_hint__() of bytearray itearator no longer return
|
||||||
negative integer for resized bytearray.
|
negative integer for resized bytearray.
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,16 @@ static size_t count_reuse = 0;
|
||||||
static void
|
static void
|
||||||
show_alloc(void)
|
show_alloc(void)
|
||||||
{
|
{
|
||||||
|
PyObject *xoptions, *value;
|
||||||
|
_Py_IDENTIFIER(showalloccount);
|
||||||
|
|
||||||
|
xoptions = PySys_GetXOptions();
|
||||||
|
if (xoptions == NULL)
|
||||||
|
return;
|
||||||
|
value = _PyDict_GetItemId(xoptions, &PyId_showalloccount);
|
||||||
|
if (value != Py_True)
|
||||||
|
return;
|
||||||
|
|
||||||
fprintf(stderr, "List allocations: %" PY_FORMAT_SIZE_T "d\n",
|
fprintf(stderr, "List allocations: %" PY_FORMAT_SIZE_T "d\n",
|
||||||
count_alloc);
|
count_alloc);
|
||||||
fprintf(stderr, "List reuse through freelist: %" PY_FORMAT_SIZE_T
|
fprintf(stderr, "List reuse through freelist: %" PY_FORMAT_SIZE_T
|
||||||
|
|
|
@ -109,6 +109,15 @@ void
|
||||||
dump_counts(FILE* f)
|
dump_counts(FILE* f)
|
||||||
{
|
{
|
||||||
PyTypeObject *tp;
|
PyTypeObject *tp;
|
||||||
|
PyObject *xoptions, *value;
|
||||||
|
_Py_IDENTIFIER(showalloccount);
|
||||||
|
|
||||||
|
xoptions = PySys_GetXOptions();
|
||||||
|
if (xoptions == NULL)
|
||||||
|
return;
|
||||||
|
value = _PyDict_GetItemId(xoptions, &PyId_showalloccount);
|
||||||
|
if (value != Py_True)
|
||||||
|
return;
|
||||||
|
|
||||||
for (tp = type_list; tp; tp = tp->tp_next)
|
for (tp = type_list; tp; tp = tp->tp_next)
|
||||||
fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
|
fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
|
||||||
|
|
|
@ -36,6 +36,16 @@ static Py_ssize_t count_tracked = 0;
|
||||||
static void
|
static void
|
||||||
show_track(void)
|
show_track(void)
|
||||||
{
|
{
|
||||||
|
PyObject *xoptions, *value;
|
||||||
|
_Py_IDENTIFIER(showalloccount);
|
||||||
|
|
||||||
|
xoptions = PySys_GetXOptions();
|
||||||
|
if (xoptions == NULL)
|
||||||
|
return;
|
||||||
|
value = _PyDict_GetItemId(xoptions, &PyId_showalloccount);
|
||||||
|
if (value != Py_True)
|
||||||
|
return;
|
||||||
|
|
||||||
fprintf(stderr, "Tuples created: %" PY_FORMAT_SIZE_T "d\n",
|
fprintf(stderr, "Tuples created: %" PY_FORMAT_SIZE_T "d\n",
|
||||||
count_tracked + count_untracked);
|
count_tracked + count_untracked);
|
||||||
fprintf(stderr, "Tuples tracked by the GC: %" PY_FORMAT_SIZE_T
|
fprintf(stderr, "Tuples tracked by the GC: %" PY_FORMAT_SIZE_T
|
||||||
|
|
|
@ -626,7 +626,7 @@ Py_FinalizeEx(void)
|
||||||
|
|
||||||
/* Debugging stuff */
|
/* Debugging stuff */
|
||||||
#ifdef COUNT_ALLOCS
|
#ifdef COUNT_ALLOCS
|
||||||
dump_counts(stdout);
|
dump_counts(stderr);
|
||||||
#endif
|
#endif
|
||||||
/* dump hash stats */
|
/* dump hash stats */
|
||||||
_PyHash_Fini();
|
_PyHash_Fini();
|
||||||
|
|
Loading…
Reference in New Issue