summaryrefslogtreecommitdiff
path: root/docs/reference/glib/tmpl/memory.sgml
blob: 063b7a94957ed982bd78d723e2ae53f161fb5a9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
<!-- ##### SECTION Title ##### -->
Memory Allocation

<!-- ##### SECTION Short_Description ##### -->
general memory-handling.

<!-- ##### SECTION Long_Description ##### -->
<para>
These functions provide support for allocating and freeing memory.
</para>
<note>
<para>
If any call to allocate memory fails, the application is terminated.
This also means that there is no need to check if the call succeeded.
</para>
</note>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### MACRO g_new ##### -->
<para>
Allocates @n_structs elements of type @struct_type.
The returned pointer is cast to a pointer to the given type.
If @n_structs is 0 it returns %NULL.
</para>

@struct_type: the type of the elements to allocate.
@n_structs: the number of elements to allocate.
@Returns: a pointer to the allocated memory, cast to a pointer to @struct_type.


<!-- ##### MACRO g_new0 ##### -->
<para>
Allocates @n_structs elements of type @struct_type, initialized to 0's.
The returned pointer is cast to a pointer to the given type.
If @n_structs is 0 it returns %NULL.
</para>

@struct_type: the type of the elements to allocate.
@n_structs: the number of elements to allocate.
@Returns: a pointer to the allocated memory, cast to a pointer to @struct_type.


<!-- ##### MACRO g_renew ##### -->
<para>
Reallocates the memory pointed to by @mem, so that it now has space for
@n_structs elements of type @struct_type. It returns the new address of 
the memory, which may have been moved.
</para>

@struct_type: the type of the elements to allocate.
@mem: the currently allocated memory.
@n_structs: the number of elements to allocate.
@Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type.


<!-- ##### MACRO g_try_new ##### -->
<para>
Attempts to allocate @n_structs elements of type @struct_type, and returns 
%NULL on failure. Contrast with g_new(), which aborts the program on failure.
The returned pointer is cast to a pointer to the given type. 
If @n_structs is 0 it returns %NULL.
</para>

@struct_type: the type of the elements to allocate.
@n_structs: the number of elements to allocate.
@Returns: a pointer to the allocated memory, cast to a pointer to @struct_type.
@Since: 2.8


<!-- ##### MACRO g_try_new0 ##### -->
<para>
Attempts to allocate @n_structs elements of type @struct_type, initialized 
to 0's, and returns %NULL on failure. Contrast with g_new0(), which aborts 
the program on failure.
The returned pointer is cast to a pointer to the given type.
If @n_counts is 0 it returns %NULL.
</para>

@struct_type: the type of the elements to allocate.
@n_structs: the number of elements to allocate.
@Returns: a pointer to the allocated memory, cast to a pointer to @struct_type.
@Since: 2.8


<!-- ##### MACRO g_try_renew ##### -->
<para>
Attempts to reallocate the memory pointed to by @mem, so that it now has 
space for @n_structs elements of type @struct_type, and returns %NULL on 
failure. Contrast with g_renew(), which aborts the program on failure.
It returns the new address of the memory, which may have been moved.
</para>

@struct_type: the type of the elements to allocate.
@mem: the currently allocated memory.
@n_structs: the number of elements to allocate.
@Returns: a pointer to the new allocated memory, cast to a pointer to @struct_type.
@Since: 2.8


<!-- ##### FUNCTION g_malloc ##### -->
<para>
Allocates @n_bytes bytes of memory.
If @n_bytes is 0 it returns %NULL.
</para>

@n_bytes: the number of bytes to allocate.
@Returns: a pointer to the allocated memory.


<!-- ##### FUNCTION g_malloc0 ##### -->
<para>
Allocates @n_bytes bytes of memory, initialized to 0's.
If @n_bytes is 0 it returns %NULL.
</para>

@n_bytes: the number of bytes to allocate.
@Returns: a pointer to the allocated memory.


<!-- ##### FUNCTION g_realloc ##### -->
<para>
Reallocates the memory pointed to by @mem, so that it now has space for
@n_bytes bytes of memory. It returns the new address of the memory, which may
have been moved. @mem may be %NULL, in which case it's considered to 
have zero-length. @n_bytes may be 0, in which case %NULL will be returned.
</para>

@mem: the memory to reallocate.
@n_bytes: new size of the memory in bytes.
@Returns: the new address of the allocated memory.


<!-- ##### FUNCTION g_try_malloc ##### -->
<para>
Attempts to allocate @n_bytes, and returns %NULL on failure. 
Contrast with g_malloc(), which aborts the program on failure.
</para>

@n_bytes: number of bytes to allocate.
@Returns: the allocated memory, or %NULL.


<!-- ##### FUNCTION g_try_malloc0 ##### -->
<para>
Attempts to allocate @n_bytes, initialized to 0's, and returns %NULL on 
failure. Contrast with g_malloc0(), which aborts the program on failure.
</para>

@n_bytes: number of bytes to allocate.
@Returns: the allocated memory, or %NULL.
@Since: 2.8


<!-- ##### FUNCTION g_try_realloc ##### -->
<para>
Attempts to realloc @mem to a new size, @n_bytes, and returns %NULL
on failure. Contrast with g_realloc(), which aborts the program
on failure. If @mem is %NULL, behaves the same as g_try_malloc().
</para>

@mem: previously-allocated memory, or %NULL.
@n_bytes: number of bytes to allocate.
@Returns: the allocated memory, or %NULL.


<!-- ##### FUNCTION g_free ##### -->
<para>
Frees the memory pointed to by @mem.
If @mem is %NULL it simply returns.
</para>

@mem: the memory to free.


<!-- ##### MACRO g_alloca ##### -->
<para>
Allocates @size bytes on the stack; these bytes will be freed when the current
stack frame is cleaned up. This macro essentially just wraps the 
<function>alloca()</function> function present on most UNIX variants. 
Thus it provides the same advantages and pitfalls as <function>alloca()</function>:
<variablelist>
  <varlistentry><term></term><listitem><para>
    + <function>alloca()</function> is very fast, as on most systems it's implemented by just adjusting
    the stack pointer register.
  </para></listitem></varlistentry>
  <varlistentry><term></term><listitem><para>
    + It doesn't cause any memory fragmentation, within its scope, separate <function>alloca()</function>
    blocks just build up and are released together at function end.
  </para></listitem></varlistentry>
  <varlistentry><term></term><listitem><para>
    - Allocation sizes have to fit into the current stack frame. For instance in a
      threaded environment on Linux, the per-thread stack size is limited to 2 Megabytes,
      so be sparse with <function>alloca()</function> uses.
  </para></listitem></varlistentry>
  <varlistentry><term></term><listitem><para>
    - Allocation failure due to insufficient stack space is not indicated with a %NULL
      return like e.g. with <function>malloc()</function>. Instead, most systems probably handle it the same
      way as out of stack space situations from infinite function recursion, i.e.
      with a segmentation fault.
  </para></listitem></varlistentry>
  <varlistentry><term></term><listitem><para>
    - Special care has to be taken when mixing <function>alloca()</function> with GNU C variable sized arrays.
      Stack space allocated with <function>alloca()</function> in the same scope as a variable sized array
      will be freed together with the variable sized array upon exit of that scope, and
      not upon exit of the enclosing function scope.
  </para></listitem></varlistentry>
</variablelist>

</para>

@size:    number of bytes to allocate.
@Returns: space for @size bytes, allocated on the stack


<!-- ##### MACRO g_newa ##### -->
<para>
Wraps g_alloca() in a more typesafe manner.
</para>

@struct_type: Type of memory chunks to be allocated
@n_structs:   Number of chunks to be allocated
@Returns:     Pointer to stack space for @n_structs chunks of type @struct_type


<!-- ##### MACRO g_memmove ##### -->
<para>

</para>

@dest: 
@src: 
@len: 


<!-- ##### FUNCTION g_memdup ##### -->
<para>
Allocates @byte_size bytes of memory, and copies @byte_size bytes into it
from @mem. If @mem is %NULL it returns %NULL.
</para>

@mem: the memory to copy.
@byte_size: the number of bytes to copy.
@Returns: a pointer to the newly-allocated copy of the memory, or %NULL if @mem
is %NULL.


<!-- ##### STRUCT GMemVTable ##### -->
<para>
A set of functions used to perform memory allocation. The same #GMemVTable must
be used for all allocations in the same program; a call to g_mem_set_vtable(),
if it exists, should be prior to any use of GLib.
</para>

@malloc: function to use for allocating memory.
@realloc: function to use for reallocating memory.
@free: function to use to free memory.
@calloc: function to use for allocating zero-filled memory.
@try_malloc: function to use for allocating memory without a default error handler.
@try_realloc: function to use for reallocating memory without a default error handler.

<!-- ##### FUNCTION g_mem_set_vtable ##### -->
<para>
Sets the #GMemVTable to use for memory allocation. You can use this to provide
custom memory allocation routines. <emphasis>This function must be called before using any other GLib functions.</emphasis> The @vtable only needs to provide <function>malloc()</function>, <function>realloc()</function>, and <function>free()</function>
functions; GLib can provide default implementations of the others.  The <function>malloc()</function>
and <function>realloc()</function> implementations should return %NULL on failure, GLib will handle
error-checking for you. @vtable is copied, so need not persist after this 
function has been called.
</para>

@vtable: table of memory allocation routines.


<!-- ##### FUNCTION g_mem_is_system_malloc ##### -->
<para>

</para>

@Returns: 


<!-- ##### VARIABLE glib_mem_profiler_table ##### -->
<para>
A #GMemVTable containing profiling variants of the memory
allocation functions. Use them together with g_mem_profile()
in order to get information about the memory allocation pattern
of your program.
</para>


<!-- ##### FUNCTION g_mem_profile ##### -->
<para>
Outputs a summary of memory usage.
</para>
<para>
It outputs the frequency of allocations of different sizes,
the total number of bytes which have been allocated,
the total number of bytes which have been freed,
and the difference between the previous two values, i.e. the number of bytes
still in use.
</para>
<para>
Note that this function will not output anything unless you have
previously installed the #glib_mem_profiler_table with g_mem_set_vtable().
</para>