summaryrefslogtreecommitdiff
path: root/docs/src
diff options
context:
space:
mode:
author0dminnimda <0dminnimda@gmail.com>2021-08-08 11:30:07 +0300
committerGitHub <noreply@github.com>2021-08-08 10:30:07 +0200
commit3a0ca192ed497f81c7bee60f13f635c9ac265e72 (patch)
tree681ea6e4a36299c47bd0ebe2ac40f38cda761481 /docs/src
parentec8c0804f1a847e7f9b92210d756507afb6ae9b3 (diff)
downloadcython-3a0ca192ed497f81c7bee60f13f635c9ac265e72.tar.gz
docs: Pythonise documentation on Memory Allocation (memory_allocation.rst) (GH-4316)
Diffstat (limited to 'docs/src')
-rw-r--r--docs/src/tutorial/memory_allocation.rst40
1 files changed, 34 insertions, 6 deletions
diff --git a/docs/src/tutorial/memory_allocation.rst b/docs/src/tutorial/memory_allocation.rst
index a6dc0ae1b..fa79310de 100644
--- a/docs/src/tutorial/memory_allocation.rst
+++ b/docs/src/tutorial/memory_allocation.rst
@@ -4,6 +4,9 @@
Memory Allocation
*****************
+.. include::
+ ../two-syntax-variants-used
+
Dynamic memory allocation is mostly a non-issue in Python. Everything is an
object, and the reference counting system and garbage collector automatically
return memory to the system when it is no longer being used.
@@ -19,7 +22,7 @@ In some situations, however, these objects can still incur an unacceptable
amount of overhead, which can then makes a case for doing manual memory
management in C.
-Simple C values and structs (such as a local variable ``cdef double x``) are
+Simple C values and structs (such as a local variable ``cdef double x`` / ``x: cython.double``) are
usually :term:`allocated on the stack<Stack allocation>` and passed by value, but for larger and more
complicated objects (e.g. a dynamically-sized list of doubles), the memory must
be :term:`manually requested and released<Heap allocation>`. C provides the functions :c:func:`malloc`,
@@ -34,8 +37,15 @@ in cython from ``clibc.stdlib``. Their signatures are:
A very simple example of malloc usage is the following:
-.. literalinclude:: ../../examples/tutorial/memory_allocation/malloc.pyx
- :linenos:
+
+.. tabs::
+ .. group-tab:: Pure Python
+
+ .. literalinclude:: ../../examples/tutorial/memory_allocation/malloc.py
+
+ .. group-tab:: Cython
+
+ .. literalinclude:: ../../examples/tutorial/memory_allocation/malloc.pyx
Note that the C-API functions for allocating memory on the Python heap
are generally preferred over the low-level C functions above as the
@@ -45,9 +55,20 @@ smaller memory blocks, which speeds up their allocation by avoiding
costly operating system calls.
The C-API functions can be found in the ``cpython.mem`` standard
-declarations file::
+declarations file:
+
+.. tabs::
+ .. group-tab:: Pure Python
+
+ .. code-block:: python
- from cpython.mem cimport PyMem_Malloc, PyMem_Realloc, PyMem_Free
+ from cython.cimports.cpython.mem import PyMem_Malloc, PyMem_Realloc, PyMem_Free
+
+ .. group-tab:: Cython
+
+ .. code-block:: cython
+
+ from cpython.mem cimport PyMem_Malloc, PyMem_Realloc, PyMem_Free
Their interface and usage is identical to that of the corresponding
low-level C functions.
@@ -64,4 +85,11 @@ If a chunk of memory needs a larger lifetime than can be managed by a
to a Python object to leverage the Python runtime's memory management,
e.g.:
-.. literalinclude:: ../../examples/tutorial/memory_allocation/some_memory.pyx
+.. tabs::
+ .. group-tab:: Pure Python
+
+ .. literalinclude:: ../../examples/tutorial/memory_allocation/some_memory.py
+
+ .. group-tab:: Cython
+
+ .. literalinclude:: ../../examples/tutorial/memory_allocation/some_memory.pyx