diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-04-23 17:43:39 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-04-23 17:43:39 +0000 |
commit | 0a22716b74d52fcbef37bebf529048f7f3bc79e0 (patch) | |
tree | d8a40cfbeff1b0e155b28e45724de362cebcd122 | |
parent | 7c4bfd9b24092d4e57b9cd093ac616dd007dbb69 (diff) |
new file to encapsulate posix_memalign() hackery
git-svn-id: svn://localhost/ardour2/branches/3.0@4998 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | libs/pbd/malign.cc | 35 | ||||
-rw-r--r-- | libs/pbd/pbd/malign.h | 8 |
2 files changed, 43 insertions, 0 deletions
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 <cstring> +#include <cerrno> + +#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 <stdlib.h> + +int cache_aligned_malloc (void** memptr, size_t size); + +#endif /* __pbd_malign_h__ */ |