cython

Форк
0
27 строк · 983.0 Байт
1
from cpython.mem cimport PyMem_Malloc, PyMem_Realloc, PyMem_Free
2

3

4
cdef class SomeMemory:
5
    cdef double* data
6

7
    def __cinit__(self, size_t number):
8
        # allocate some memory (uninitialised, may contain arbitrary data)
9
        self.data = <double*> PyMem_Malloc(
10
            number * sizeof(double))
11
        if not self.data:
12
            raise MemoryError()
13

14
    def resize(self, size_t new_number):
15
        # Allocates new_number * sizeof(double) bytes,
16
        # preserving the current content and making a best-effort to
17
        # reuse the original data location.
18
        mem = <double*> PyMem_Realloc(
19
            self.data, new_number * sizeof(double))
20
        if not mem:
21
            raise MemoryError()
22
        # Only overwrite the pointer if the memory was really reallocated.
23
        # On error (mem is NULL), the originally memory has not been freed.
24
        self.data = mem
25

26
    def __dealloc__(self):
27
        PyMem_Free(self.data)  # no-op if self.data is NULL
28

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.