[glib: 1/2] gslice: Allow inlining of memset() in g_slice_new0() macro
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 1/2] gslice: Allow inlining of memset() in g_slice_new0() macro
- Date: Wed, 12 Aug 2020 13:29:36 +0000 (UTC)
commit 4c5ccd3e8fd1126722e6b3dc3d87a77d90079902
Author: Hans Petter Jansson <hpj cl no>
Date: Mon Jul 27 17:03:58 2020 +0200
gslice: Allow inlining of memset() in g_slice_new0() macro
Inlining the memset() is beneficial since the size here is constant
and usually small.
Closes #5
glib/gslice.h | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
---
diff --git a/glib/gslice.h b/glib/gslice.h
index ff8b02a65..002410635 100644
--- a/glib/gslice.h
+++ b/glib/gslice.h
@@ -23,6 +23,7 @@
#endif
#include <glib/gtypes.h>
+#include <string.h>
G_BEGIN_DECLS
@@ -43,7 +44,22 @@ void g_slice_free_chain_with_offset (gsize block_size,
gpointer mem_chain,
gsize next_offset);
#define g_slice_new(type) ((type*) g_slice_alloc (sizeof (type)))
-#define g_slice_new0(type) ((type*) g_slice_alloc0 (sizeof (type)))
+
+/* Allow the compiler to inline memset(). Since the size is a constant, this
+ * can significantly improve performance. */
+#if defined (__GNUC__) && (__GNUC__ >= 2) && defined (__OPTIMIZE__)
+# define g_slice_new0(type) \
+ (type *) (G_GNUC_EXTENSION ({ \
+ gsize __s = sizeof (type); \
+ gpointer __p; \
+ __p = g_slice_alloc (__s); \
+ memset (__p, 0, __s); \
+ __p; \
+ }))
+#else
+# define g_slice_new0(type) ((type*) g_slice_alloc0 (sizeof (type)))
+#endif
+
/* MemoryBlockType *
* g_slice_dup (MemoryBlockType,
* MemoryBlockType *mem_block);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]