×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

5.10.3. Управление памятью

5.10.3.1. SPI_palloc — выделить память в вышестоящем контексте исполнителя
5.10.3.2. SPI_repalloc — перераспределить память в вышестоящем контексте исполнителя
5.10.3.3. SPI_pfree — освобождение памяти в верхнем контексте исполнителя
5.10.3.4. SPI_copytuple — создание копии строки в верхнем контексте исполнителя
5.10.3.5. SPI_returntuple — подготовка к возврату кортежа в виде Datum
5.10.3.6. SPI_modifytuple — создать строку путем замены выбранных полей в заданной строке
5.10.3.7. SPI_freetuple — освободить строку, выделенную в верхнем контексте исполнителя
5.10.3.8. SPI_freetuptable — освободить набор строк, созданный SPI_execute или аналогичной функцией
5.10.3.9. SPI_freeplan — освободить ранее сохраненное подготовленное выражение

Digital Q.DataBase выделяет память внутри контексты памяти, которые обеспечивают удобный способ управления выделением памяти в различных местах программы для объектов с разным временем жизни. Уничтожение контекста освобождает всю выделенную в нем память. Таким образом, во избежание утечек памяти нет необходимости отслеживать отдельные объекты; вместо этого достаточно управлять лишь относительно небольшим количеством контекстов. palloc и связанные с ней функции выделяют память из «текущего» контекста.

SPI_connect создает новый контекст памяти и делает его текущим. SPI_finish восстанавливает предыдущий текущий контекст памяти и уничтожает контекст, созданный функцией SPI_connect. Эти действия гарантируют, что временная память, выделенная внутри функции на языке C, будет освобождена при выходе из нее, что предотвращает утечку памяти.

Однако, если функция на языке C должна возвращать объект в выделенной памяти (например, значение типа данных, передаваемого по ссылке), вы не можете выделять эту память с помощью palloc, по крайней мере, пока вы подключены к SPI. Если вы попытаетесь это сделать, объект будет удален из памяти SPI_finish, и ваша функция на языке C не будет работать стабильно. Чтобы решить эту проблему, используйте SPI_palloc для выделения памяти под возвращаемый объект. SPI_palloc выделяет память в «верхнем контексте исполнителя», то есть в контексте памяти, который был текущим в момент вызова SPI_connect , а это именно тот контекст, который необходим для значения, возвращаемого вашей функцией на языке C. Некоторые другие вспомогательные функции, описанные в данном разделе, также возвращают объекты, созданные в верхнем контексте исполнителя.

Когда SPI_connect вызывается, текущим становится закрытый контекст функции на языке C, созданный SPI_connect, is made the current context. Все операции выделения памяти, выполняемые palloc, repalloc, или вспомогательными функциями SPI (за исключением случаев, описанных в данном разделе), производятся в этом контексте. Когда функция на языке C отключается от менеджера SPI (посредством SPI_finish) текущий контекст восстанавливается до вышестоящего контекста исполнителя, а вся память, выделенная в контексте памяти функции на языке C, освобождается и более не может быть использована.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению