mirror of
https://github.com/python/cpython.git
synced 2025-07-30 14:44:10 +00:00
bpo-45116: Py_DEBUG ignores Py_ALWAYS_INLINE (GH-28419)
If the Py_DEBUG macro is defined, the Py_ALWAYS_INLINE macro does nothing.
This commit is contained in:
parent
51ebb7f4f5
commit
e4044e9f89
2 changed files with 13 additions and 1 deletions
|
@ -124,6 +124,9 @@ complete listing.
|
||||||
worse performances (due to increased code size for example). The compiler is
|
worse performances (due to increased code size for example). The compiler is
|
||||||
usually smarter than the developer for the cost/benefit analysis.
|
usually smarter than the developer for the cost/benefit analysis.
|
||||||
|
|
||||||
|
If Python is :ref:`built in debug mode <debug-build>` (if the ``Py_DEBUG``
|
||||||
|
macro is defined), the :c:macro:`Py_ALWAYS_INLINE` macro does nothing.
|
||||||
|
|
||||||
It must be specified before the function return type. Usage::
|
It must be specified before the function return type. Usage::
|
||||||
|
|
||||||
static inline Py_ALWAYS_INLINE int random(void) { return 4; }
|
static inline Py_ALWAYS_INLINE int random(void) { return 4; }
|
||||||
|
|
|
@ -568,10 +568,19 @@ extern "C" {
|
||||||
// worse performances (due to increased code size for example). The compiler is
|
// worse performances (due to increased code size for example). The compiler is
|
||||||
// usually smarter than the developer for the cost/benefit analysis.
|
// usually smarter than the developer for the cost/benefit analysis.
|
||||||
//
|
//
|
||||||
|
// If Python is built in debug mode (if the Py_DEBUG macro is defined), the
|
||||||
|
// Py_ALWAYS_INLINE macro does nothing.
|
||||||
|
//
|
||||||
// It must be specified before the function return type. Usage:
|
// It must be specified before the function return type. Usage:
|
||||||
//
|
//
|
||||||
// static inline Py_ALWAYS_INLINE int random(void) { return 4; }
|
// static inline Py_ALWAYS_INLINE int random(void) { return 4; }
|
||||||
#if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)
|
#if defined(Py_DEBUG)
|
||||||
|
// If Python is built in debug mode, usually compiler optimizations are
|
||||||
|
// disabled. In this case, Py_ALWAYS_INLINE can increase a lot the stack
|
||||||
|
// memory usage. For example, forcing inlining using gcc -O0 increases the
|
||||||
|
// stack usage from 6 KB to 15 KB per Python function call.
|
||||||
|
# define Py_ALWAYS_INLINE
|
||||||
|
#elif defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)
|
||||||
# define Py_ALWAYS_INLINE __attribute__((always_inline))
|
# define Py_ALWAYS_INLINE __attribute__((always_inline))
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
# define Py_ALWAYS_INLINE __forceinline
|
# define Py_ALWAYS_INLINE __forceinline
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue