Files
RedBear-OS/recipes/libs/glib/source/docs/reference/glib/memory-slices.md
T
vasilito facf0c92e0 feat: track all source trees in git — full fork offline-first model
Red Bear OS is a full fork. All sources must be available from git clone
with zero network access. Removed gitignore rules that excluded fetched
source trees under recipes/*/source/, local/recipes/kde/*/source/,
local/recipes/qt/*/source/, and vendor source trees.

Build artifacts (target/, build/, source.tar, *.o, *.so) remain excluded.

127291 files added — kernel, relibc, base, bootloader, pkgar, all KDE/Qt
frameworks, mesa, wayland, DRM drivers, and every other recipe source.
2026-05-14 10:55:53 +01:00

1.6 KiB
Raw Blame History

Title: Memory Slices

Memory Slices

GSlice was a space-efficient and multi-processing scalable way to allocate equal sized pieces of memory. Since GLib 2.76, its implementation has been removed and it calls g_malloc() and g_free(), because the performance of the system-default allocators has improved on all platforms since GSlice was written.

The GSlice APIs have not been deprecated, as they are widely in use and doing so would be very disruptive for little benefit.

New code should be written using [func@GLib.new]/[func@GLib.malloc] and [func@GLib.free]. There is no particular benefit in porting existing code away from g_slice_new()/g_slice_free() unless its being rewritten anyway.

Here is an example for using the slice allocator:

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]);

And here is an example for using the using the slice allocator with data structures:

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);