|
From: <axl...@us...> - 2008-12-23 19:30:19
|
Revision: 82
http://hgengine.svn.sourceforge.net/hgengine/?rev=82&view=rev
Author: axlecrusher
Date: 2008-12-23 19:30:16 +0000 (Tue, 23 Dec 2008)
Log Message:
-----------
memory aligned allocation
Modified Paths:
--------------
Mercury2/src/MercuryUtil.cpp
Mercury2/src/MercuryUtil.h
Modified: Mercury2/src/MercuryUtil.cpp
===================================================================
--- Mercury2/src/MercuryUtil.cpp 2008-12-23 19:29:21 UTC (rev 81)
+++ Mercury2/src/MercuryUtil.cpp 2008-12-23 19:30:16 UTC (rev 82)
@@ -17,6 +17,14 @@
return x;
}
+void* mmemalign(size_t align, size_t size, void*& mem)
+{
+ uintptr_t mask = ~(uintptr_t)(align - 1);
+ mem = malloc(size+align-1);
+ void *ptr = (void *)(((uintptr_t)mem+align-1) & mask);
+ return ptr;
+}
+
/***************************************************************************
* Copyright (C) 2008 by Joshua Allen *
* *
Modified: Mercury2/src/MercuryUtil.h
===================================================================
--- Mercury2/src/MercuryUtil.h 2008-12-23 19:29:21 UTC (rev 81)
+++ Mercury2/src/MercuryUtil.h 2008-12-23 19:30:16 UTC (rev 82)
@@ -9,12 +9,17 @@
#define SAFE_DELETE( x ) { if (x) { delete x; } x = NULL; }
#define SAFE_DELETE_ARRAY( x ) { if (x) { delete[] x; } x = NULL; }
-#define SAFE_FREE(p) { if(p) { free(p); (p)=0; } }
+#define SAFE_FREE(p) { if(p) { free(p); p=0; } }
#define TO_ENDIAN( x )
+//returns an aligned pointer, mem is the actual (unaligned) pointer for freeing
+void* mmemalign(size_t align, size_t size, void*& mem);
+
#if defined(__GNUC__)
#define M_ALIGN(n) __attribute__((aligned(n)))
+//#define MMALLOC(n) memalign(32, n)
+//#define MMALLOC(n) malloc(n)
#else
#define M_ALIGN(n)
#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|