cython

Форк
0
27 строк · 1.1 Кб
1
from cython.cimports.cpython.mem import PyMem_Malloc, PyMem_Realloc, PyMem_Free
2

3
@cython.cclass
4
class SomeMemory:
5
    data: cython.p_double
6

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

14
    def resize(self, new_number: cython.size_t):
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 = cython.cast(cython.p_double, PyMem_Realloc(
19
            self.data, new_number * cython.sizeof(cython.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 Вы можете самостоятельно в настройках Вашего браузера.