Справочное описание GLib | ||||
---|---|---|---|---|
#include <glib.h>
#define g_new (struct_type, n_structs)
#define g_new0 (struct_type, n_structs)
#define g_renew (struct_type, mem, n_structs)
#define g_try_new (struct_type, n_structs)
#define g_try_new0 (struct_type, n_structs)
#define g_try_renew (struct_type, mem, n_structs)
gpointer g_malloc (gulong n_bytes);
gpointer g_malloc0 (gulong n_bytes);
gpointer g_realloc (gpointer mem,
gulong n_bytes);
gpointer g_try_malloc (gulong n_bytes);
gpointer g_try_malloc0 (gulong n_bytes);
gpointer g_try_realloc (gpointer mem,
gulong n_bytes);
void g_free (gpointer mem);
extern gboolean g_mem_gc_friendly;
#define g_alloca (size)
#define g_newa (struct_type, n_structs)
#define g_memmove (dest,src,len)
gpointer g_memdup (gconstpointer mem,
guint byte_size);
GMemVTable;
void g_mem_set_vtable (GMemVTable *vtable);
gboolean g_mem_is_system_malloc (void);
extern GMemVTable *glib_mem_profiler_table;
void g_mem_profile (void);
Эти функции обеспечивают поддержку распределения и освобождения памяти.
Если любой вызов распределения памяти завершается неудачно, приложение закрывается. Это означает что нет необходимости проверять успешность выполнения вызова.
#define g_new(struct_type, n_structs)
Распределяет n_structs
элементов типа struct_type
.
Возвращаемый указатель приводится к указателю для данного типа.
Если n_structs
равен 0, то возвращается NULL
.
Так как возвращаемый указатель уже приведён к правильному типу, обычно не требуется явное приведение, это может скрыть ошибки распределения памяти.
struct_type : |
тип элементов для распределения. |
n_structs : |
количество элементов для распределения. |
Возвращает : | указатель для распределенной памяти, приведённый к указателю типа struct_type .
|
#define g_new0(struct_type, n_structs)
Распределяет n_structs
элементов типа struct_type
, инициализирует в 0's.
Возвращаемый указатель приведён к указателю полученного типа.
Если n_structs
равен 0 возвращается NULL
.
Так как возвращаемый указатель уже приведён к правильному типу, обычно не требуется явное приведение, это может скрыть ошибки распределения памяти.
struct_type : |
тип элементов для распределения. |
n_structs : |
количество элементов для распределения. |
Возвращает : | указатель для распределённой памяти, приведённый к указателю типа struct_type .
|
#define g_renew(struct_type, mem, n_structs)
Перераспределяет память указанную параметром mem
,
так чтобы она имела свободное пространство для n_structs
элементов типа struct_type
. Возвращает новый адрес памяти,
которая возможно была перемещена.
struct_type : |
тип элементов для распределения. |
mem : |
текущая распределённая память. |
n_structs : |
количество элементов для распределения. |
Возвращает : | указатель на вновь распределенную память, приведен к указателю типа struct_type .
|
#define g_try_new(struct_type, n_structs)
Пытается распределить n_structs
элементов типа struct_type
и возвращает
NULL
если неудаётся.
В отличие от g_new()
, которая закрывает программу при неудаче.
Возвращаемый указатель приведён к указателю полученного типа.
Если n_structs
равен 0 возвращается NULL
.
struct_type : |
тип элементов для распределения. |
n_structs : |
количество элементов для рапределения. |
Возвращает : | указатель на распределенную память, приведённый к указателю типа struct_type .
|
Начиная с версии 2.8
#define g_try_new0(struct_type, n_structs)
Пытается распределить n_structs
элементов типа struct_type
, инициализируя 0
и возвращает NULL
при неудаче. В отличие от g_new0()
, которая закрывает программу при неудаче.
Возвращаемый указатель приводится к указателю полученного типа.
Если n_counts
равен 0, то возвращается NULL
.
struct_type : |
тип элементов для распределения. |
n_structs : |
количество элементов для рапределения. |
Возвращает : | указатель на распределенную память, приведённый к указателю типа struct_type .
|
Начиная с версии 2.8
#define g_try_renew(struct_type, mem, n_structs)
Пытается перераспределить память указанную параметром mem
,
так чтобы появилось пространство для n_structs
элементов типа struct_type
и возвращает NULL
при неудаче.
В отличие от g_renew()
, которая закрывает программу при неудаче.
Возвращает новый адрес памяти, которая могла быть перемещена.
struct_type : |
тип элементов для распределения. |
mem : |
текущее распределение памяти. |
n_structs : |
количество элементов для рапределения. |
Возвращает : | указатель на вновь распределённую память, приведённый к указателю типа struct_type .
|
Начиная с версии 2.8
gpointer g_malloc (gulong n_bytes);
Распределяет n_bytes
байт памяти.
Если n_bytes
равен 0, возвращает NULL
.
n_bytes : |
количество байт для распределения. |
Возвращает : | указатель на распределённую память. |
gpointer g_malloc0 (gulong n_bytes);
Распределяет n_bytes
байт памяти, инициализируя 0's.
Если n_bytes
равен 0, возвращает NULL
.
n_bytes : |
количество байт для распределения. |
Возвращает : | указатель на распределённую память. |
gpointer g_realloc (gpointer mem,
gulong n_bytes);
Перераспределяет память указанную параметром mem
,
так чтобы было свободное пространство для
n_bytes
байт памяти.
Возвращает новый адрес памяти, которая могла быть перемещена.
mem
может быть NULL
, в этом случае предполагается нулевая длина.
n_bytes
может быть 0, в этом случае возвращается NULL
.
mem : |
память для перераспределения. |
n_bytes : |
новый размер памяти в байтах. |
Возвращает : | новый адрес распределённой памяти. |
gpointer g_try_malloc (gulong n_bytes);
Пытается распределить n_bytes
, и возвращает NULL
при неудаче.
В отличие от g_malloc()
, которая закрывает программу при неудаче.
n_bytes : |
количество байт для распределения. |
Возвращает : | распределённую память или NULL .
|
gpointer g_try_malloc0 (gulong n_bytes);
Пытается распределить n_bytes
, инициализируя 0's, и возвращает NULL
при неудаче.
В отличие от g_malloc0()
, которая закрывает программу при неудаче.
n_bytes : |
количество байт для распределения. |
Возвращает : | распределённую память или NULL .
|
Начиная с версии 2.8
gpointer g_try_realloc (gpointer mem,
gulong n_bytes);
Пытается перераспределить mem
в новый размер
n_bytes
, и возвращает NULL
при неудаче.
В отличие от g_realloc()
, которая закрывает программу при неудаче.
Если mem
равен NULL
, работает также как g_try_malloc()
.
void g_free (gpointer mem);
Освобождает память указанную параметром mem
.
Если mem
равен NULL
, то функция ничего не делает.
mem : |
память для освобождения. |
extern gboolean g_mem_gc_friendly;
Эта переменная равна TRUE
если переменная окружения G_DEBUG
включает ключ gc-friendly.
#define g_alloca(size)
Распределяет size
байт в стек; эти байты освобождаются когда
текущий кадр стека очищается. Этот макрос по существу просто оболочка функции
предоставляемой в большинстве
вариантов UNIX.
Поэтому он обеспечивает те же самые преимущества и ловушки как alloca()
:
alloca()
+ |
|
+ она не вызывает фрагментации памяти, в пределах её области, разделяемые |
|
- распределяемый размер должен вписываться в текущий кадр стека. Например в потоковом окружении
Linux, размер стека посредством потока ограничен 2 мегабайтами,
поэтому разряжен при использовании |
|
- неудачное распределение из-за недостатка пространства в стеке не указывается возвращением
|
|
- особое внимание должно быть уделено при смешивании
|
size : |
количество байт для распределения. |
Возвращает : | пространство для size байт, распределяемое в стеке
|
#define g_newa(struct_type, n_structs)
Оболочка g_alloca()
в более типо-безопасной манере.
struct_type : |
тип участка памяти для распределения |
n_structs : |
Количество участков для распределения |
Возвращает : | указатель на пространство стека для n_structs участков типа struct_type
|
#define g_memmove(dest,src,len)
Копирует блок памяти длиной len
байт, из src
в dest
.
Источник и адресат могут перекрываться.
Для использования этой функции вы должны самостоятельно включить
string.h
, потому что этот макрос обычно простое решение для
memmove()
и GLib не будет включать
string.h
за вас.
dest : |
адресат для копируемых байт. |
src : |
источник копируемых байт. |
len : |
количество копируемых байт. |
gpointer g_memdup (gconstpointer mem,
guint byte_size);
Распределяет byte_size
байт памяти и копирует byte_size
байт из mem
. Если mem
равен NULL
возвращается NULL
.
typedef struct {
gpointer (*malloc) (gsize n_bytes);
gpointer (*realloc) (gpointer mem,
gsize n_bytes);
void (*free) (gpointer mem);
/* опционально; устанавливается в NULL если не используется! */
gpointer (*calloc) (gsize n_blocks,
gsize n_block_bytes);
gpointer (*try_malloc) (gsize n_bytes);
gpointer (*try_realloc) (gpointer mem,
gsize n_bytes);
} GMemVTable;
Устанавливает функцию используемую для распределения памяти. Также GMemVTable может использоваться
для всех распределений в той же самой программе; вызов g_mem_set_vtable()
,
если он существует, должен быть приоритетным для любого использования GLib.
malloc () |
функция используемая для распределения памяти. |
realloc () |
функция используемая для перераспределения памяти. |
free () |
функция используемая для освобождения памяти. |
calloc () |
функция используемая для распределения памяти заполняемой нулями (allocating zero-filled memory). |
try_malloc () |
функция используемая для распределения памяти без обработки ошибок по умолчанию. |
try_realloc () |
функция используемая для перераспределения памяти без обработки ошибок по умолчанию. |
void g_mem_set_vtable (GMemVTable *vtable);
Заставляет GMemVTable использовать для распределения памяти. Вы можете это использовать для обеспечения выбора функций
распределения памяти. Эти функции должны вызываться перед использованием любых других функций GLib. Параметр vtable
нужен только для обеспечения
, malloc()
, и realloc()
функций; GLib может по умолчанию обеспечить реализацию других.
Реализации free()
и malloc()
должны возвращать
realloc()
NULL
при неудаче,
GLib обрабатывает контроль ошибок за вас. vtable
копируется,
поэтому не сохраняется после вызова этой функции.
vtable : |
таблица функций распределения памяти. |
gboolean g_mem_is_system_malloc (void);
Проверяет использует ли программа распределения памяти g_malloc()
системную реализацию malloc. Если возвращает TRUE
память распределяемая с помощью malloc()
взаимозаменяема памятью распределяемой с использованием g_malloc()
.
Эта функция полезна для избежания дополнительных копий распределения памяти возвращаемой с помощью
не-GLib-based API.
Разные функции распределения могут быть установлены с помощью g_mem_set_vtable()
.
Возвращает : | если TRUE , malloc() и g_malloc() могут использоваться совместно.
|
extern GMemVTable *glib_mem_profiler_table;
GMemVTable содержит
профилированные варианты функций распределения памяти.
Используйте их вместе с g_mem_profile()
для получения информации об образце распределения памяти вашей программой.
void g_mem_profile (void);
Определяет суммарное использование памяти.
Она выдаёт частоту распределений различных размеров, общее количество распределённых байт, общее количество освобождённых байт и разницу между двумя предыдущими значениями, то есть количество всё ещё используемых байт.
Помните что эта функция не определит ничего пока вы предварительно не установите
glib_mem_profiler_table с помощью g_mem_set_vtable()
.