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. |