Commit 692abf58 authored by scoder's avatar scoder Committed by GitHub

Merge pull request #2353 from gabrieldemarmiesse/test_memory_allocation_1

Added tests for "memory allocation" Part 1
parents 3464b14e 1b964d5e
import random
from libc.stdlib cimport malloc, free
def random_noise(int number=1):
cdef int i
# allocate number * sizeof(double) bytes of memory
cdef double *my_array = <double *> malloc(number * sizeof(double))
if not my_array:
raise MemoryError()
try:
ran = random.normalvariate
for i in range(number):
my_array[i] = ran(0, 1)
return [x for x in my_array[:number]]
finally:
# return the previously allocated memory to the system
free(my_array)
......@@ -32,27 +32,18 @@ in cython from ``clibc.stdlib``. Their signatures are:
void* realloc(void* ptr, size_t size)
void free(void* ptr)
A very simple example of malloc usage is the following::
import random
from libc.stdlib cimport malloc, free
def random_noise(int number=1):
cdef int i
# allocate number * sizeof(double) bytes of memory
cdef double *my_array = <double *>malloc(number * sizeof(double))
if not my_array:
raise MemoryError()
try:
ran = random.normalvariate
for i in range(number):
my_array[i] = ran(0,1)
return [ my_array[i] for i in range(number) ]
finally:
# return the previously allocated memory to the system
free(my_array)
A very simple example of malloc usage is the following:
.. literalinclude:: ../../examples/tutorial/memory_allocation/malloc.pyx
:linenos:
.. note::
Here we take Python doubles (with ``ran(0, 1)``) and convert
them to C doubles when putting them in ``my_array``. After that,
we put them back into a Python list at line 19. So those C doubles
are converted again into Python doubles. This is highly inefficient,
and only for demo purposes.
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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment