From 0a22716b74d52fcbef37bebf529048f7f3bc79e0 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 23 Apr 2009 17:43:39 +0000 Subject: [PATCH] new file to encapsulate posix_memalign() hackery git-svn-id: svn://localhost/ardour2/branches/3.0@4998 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/pbd/malign.cc | 35 +++++++++++++++++++++++++++++++++++ libs/pbd/pbd/malign.h | 8 ++++++++ 2 files changed, 43 insertions(+) create mode 100644 libs/pbd/malign.cc create mode 100644 libs/pbd/pbd/malign.h 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__ */