diff options
author | 0dminnimda <0dminnimda@gmail.com> | 2021-08-08 11:30:07 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-08 10:30:07 +0200 |
commit | 3a0ca192ed497f81c7bee60f13f635c9ac265e72 (patch) | |
tree | 681ea6e4a36299c47bd0ebe2ac40f38cda761481 /docs/examples/tutorial/memory_allocation/malloc.py | |
parent | ec8c0804f1a847e7f9b92210d756507afb6ae9b3 (diff) | |
download | cython-3a0ca192ed497f81c7bee60f13f635c9ac265e72.tar.gz |
docs: Pythonise documentation on Memory Allocation (memory_allocation.rst) (GH-4316)
Diffstat (limited to 'docs/examples/tutorial/memory_allocation/malloc.py')
-rw-r--r-- | docs/examples/tutorial/memory_allocation/malloc.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/docs/examples/tutorial/memory_allocation/malloc.py b/docs/examples/tutorial/memory_allocation/malloc.py new file mode 100644 index 000000000..fb7e82236 --- /dev/null +++ b/docs/examples/tutorial/memory_allocation/malloc.py @@ -0,0 +1,24 @@ +import random +from cython.cimports.libc.stdlib import malloc, free + +def random_noise(number: cython.int = 1): + i: cython.int + # allocate number * sizeof(double) bytes of memory + my_array: cython.p_double = cython.cast(cython.p_double, malloc( + number * cython.sizeof(cython.double))) + if not my_array: + raise MemoryError() + + try: + ran = random.normalvariate + for i in range(number): + my_array[i] = ran(0, 1) + + # ... let's just assume we do some more heavy C calculations here to make up + # for the work that it takes to pack the C double values into Python float + # objects below, right after throwing away the existing objects above. + + return [x for x in my_array[:number]] + finally: + # return the previously allocated memory to the system + free(my_array) |