内存储片
内存储片
用 GSlice 来分配大小相等的内存空间是一种节省空间且具有多处理可伸缩性。自 GLib 2.76 起,已移除其实现,它会调用 g_malloc()
和 g_free()
,因为自编写 GSlice 以来,系统默认分配器在所有平台上的性能都有所提升。
尚未弃用 GSlice API,因为它们被广泛使用,而对其进行弃用会产生严重的影响,几乎没有好处可言。
应该使用 g_new()
/g_malloc()
和 g_free()
编写新代码。除非正在重写,否则将现有代码从 g_slice_new()
/g_slice_free()
移植出来没有任何特别的好处。
以下是使用切片分配器的一个示例
gchar *mem[10000];
gint i;
// Allocate 10000 blocks.
for (i = 0; i < 10000; i++)
{
mem[i] = g_slice_alloc (50);
// Fill in the memory with some junk.
for (j = 0; j < 50; j++)
mem[i][j] = i * j;
}
// Now free all of the blocks.
for (i = 0; i < 10000; i++)
g_slice_free1 (50, mem[i]);
以下是使用切片分配器进行数据结构的示例
GRealArray *array;
// Allocate one block, using the g_slice_new() macro.
array = g_slice_new (GRealArray);
// We can now use array just like a normal pointer to a structure.
array->data = NULL;
array->len = 0;
array->alloc = 0;
array->zero_terminated = (zero_terminated ? 1 : 0);
array->clear = (clear ? 1 : 0);
array->elt_size = elt_size;
// We can free the block, so it can be reused.
g_slice_free (GRealArray, array);