Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
from cysignals.memory cimport *
cdef extern from *: int unlikely(int) nogil # Defined by Cython
cdef class MemoryAllocator: r""" An object for memory allocation, whose resources are freed upon ``__dealloc__``.
EXAMPLES::
sage: cython( ....: ''' ....: from sage.ext.memory_allocator cimport MemoryAllocator ....: cdef MemoryAllocator mem = MemoryAllocator() ....: for n in range(100): ....: mem.malloc(n) ....: mem.calloc(n, n) ....: mem.allocarray(n, n) ....: ''') """ def __cinit__(self): """ EXAMPLES::
sage: cython( ....: ''' ....: from sage.ext.memory_allocator cimport MemoryAllocator ....: cdef MemoryAllocator mem = MemoryAllocator.__new__(MemoryAllocator) ....: mem.malloc(10000) ....: print(mem.n) ....: print(mem.size) ....: ''') 1 16 """
cdef int resize(self, size_t new_size) except -1: r""" Resize the list of pointers to contain ``new_size`` elements.
It is required that ``new_size`` is at least ``self.n``, but this condition is not checked. """ cdef size_t i # Case 1: allocate pointers for the first time else: # Case 2: resize pointers
cdef inline int enlarge_if_needed(self) except -1: r""" Enlarge the list of pointers if needed such that there is at least one free entry. """
cdef void * malloc(self, size_t size) except? NULL: r""" Returns a new pointer and stores it to be automatically freed later. """
cdef void * calloc(self, size_t nmemb, size_t size) except? NULL: r""" Returns a new pointer and stores it to be automatically freed later. """
cdef void * allocarray(self, size_t nmemb, size_t size) except? NULL: r""" Returns a new pointer and stores it to be automatically freed later. """
def __dealloc__(self): r""" Free the allocated resources
EXAMPLES::
sage: from sage.ext.memory_allocator import MemoryAllocator sage: _ = MemoryAllocator() """ cdef size_t i |