From: Paul Davis Date: Thu, 23 Apr 2009 17:43:39 +0000 (+0000) Subject: new file to encapsulate posix_memalign() hackery X-Git-Tag: 3.0-alpha5~3512 X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;h=0a22716b74d52fcbef37bebf529048f7f3bc79e0;p=ardour.git new file to encapsulate posix_memalign() hackery git-svn-id: svn://localhost/ardour2/branches/3.0@4998 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/libs/pbd/malign.cc b/libs/pbd/malign.cc new file mode 100644 index 0000000000..cd3459a8b2 --- /dev/null +++ b/libs/pbd/malign.cc @@ -0,0 +1,35 @@ +#include +#include + +#include "pbd/malign.h" +#include "pbd/error.h" + +#include "i18n.h" + +using namespace PBD; + +#ifdef __x86_64__ +static const int CPU_CACHE_ALIGN = 64; +#else +static const int CPU_CACHE_ALIGN = 16; /* arguably 32 on most arches, but it matters less */ +#endif + +int cache_aligned_malloc (void** memptr, size_t size) +{ +#ifdef NO_POSIX_MEMALIGN + if (((*memptr) = malloc (size)) == 0) { + fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"), + CPU_CACHE_ALIGN, size, strerror (errno)) << endmsg; + return errno; + } else { + return 0; + } +#else + if (posix_memalign (memptr, CPU_CACHE_ALIGN, size)) { + fatal << string_compose (_("Memory allocation error: posix_memalign (%1 * %2) failed (%3)"), + CPU_CACHE_ALIGN, size, strerror (errno)) << endmsg; + } + + return 0; +#endif +} diff --git a/libs/pbd/pbd/malign.h b/libs/pbd/pbd/malign.h new file mode 100644 index 0000000000..97e68c076e --- /dev/null +++ b/libs/pbd/pbd/malign.h @@ -0,0 +1,8 @@ +#ifndef __pbd_malign_h__ +#define __pbd_malign_h__ + +#include + +int cache_aligned_malloc (void** memptr, size_t size); + +#endif /* __pbd_malign_h__ */