From 92f2d1a8952379fd594c1138a55e0f41010b6014 Mon Sep 17 00:00:00 2001 From: Gregory Lirent Date: Wed, 17 Aug 2022 10:02:58 +0300 Subject: [PATCH] =?UTF-8?q?Update=20page=20'1.2.=20=D0=A0=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=20=D1=81=20=D0=BF=D0=B0=D0=BC=D1=8F=D1=82?= =?UTF-8?q?=D1=8C=D1=8E'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.2. Работа с памятью.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/1.2. Работа с памятью.md b/1.2. Работа с памятью.md index 51feebf..7de3f74 100644 --- a/1.2. Работа с памятью.md +++ b/1.2. Работа с памятью.md @@ -1 +1,29 @@ -## Работа с памятью +## Работа с памятью + +Управление памятью в проекте осуществляется исключительно при помощи функций описанных в [include/extra/memory.h](https://gogs.lirent.ru/lirent/libcdsb/src/master/include/extra/memory.h) и [include/extra/cstring.h](https://gogs.lirent.ru/lirent/libcdsb/src/master/include/extra/cstring.h) + +Вот их полный список: + +- `void* libcdsb_aalloc (size_t a, size_t n)` +- `void* libcdsb_malloc (size_t n)` +- `void* libcdsb_calloc (size_t n, size_t c)` +- `void* libcdsb_realloc(void *p, size_t n)` +- `char* libcdsb_strdup (const char* s)` +- `char* libcdsb_strndup(const char* s, size_t n)` +- `void* libcdsb_memndup(const void* m, size_t n)` + +высвобождение памяти осуществляется системным вызовом + +- `void libcdsb_free(void* s)` + +В случае необходимости изменения принципов работы с памятью, данные символы могут быть подменены пользовательским решением: гарантированно, что иные символы не будут использованы для выделения памяти. + +Отдельным пунктом, можно обозначить служебную структуру **stack_t**, а также методы для работы с ней: + +- `void libcdsb_stack_init (stack_t* stack)` +- `void libcdsb_stack_push (stack_t* stack, void* value)` +- `void* libcdsb_stack_pop (stack_t* stack)` +- `void libcdsb_stack_flush(stack_t* stack)` + +Выделение памяти для этой структуры носит исключительный характер, так как `void libcdsb_stack_push (stack_t* stack, void* value)` использует вызов `void* malloc (size_t n)`. Высвобождение памяти в `void* libcdsb_stack_pop (stack_t* stack)` и `void libcdsb_stack_flush(stack_t* stack)` осуществляется вызовом `void free(void* s)`. +