A malloc library is expected to provide a better implementation using the knowledge of its internal details.
Signed-off-by: YAMAMOTO Takashi <yamam...@valinux.co.jp> --- lib/util.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/util.c b/lib/util.c index 464d730..37d2ba0 100644 --- a/lib/util.c +++ b/lib/util.c @@ -189,6 +189,18 @@ BUILD_ASSERT_DECL(CACHE_LINE_SIZE >= MEM_ALIGN); void * xmalloc_cacheline(size_t size) { +#ifdef HAVE_POSIX_MEMALIGN + void *p; + int error; + + ovs_assert(size != 0); + COVERAGE_INC(util_xalloc); + error = posix_memalign(&p, CACHE_LINE_SIZE, size); + if (error != 0) { + out_of_memory(); + } + return p; +#else void **payload; void *base; @@ -212,6 +224,7 @@ xmalloc_cacheline(size_t size) *payload = base; return (char *) payload + MEM_ALIGN; +#endif } /* Like xmalloc_cacheline() but clears the allocated memory to all zero @@ -229,9 +242,13 @@ xzalloc_cacheline(size_t size) void free_cacheline(void *p) { +#ifdef HAVE_POSIX_MEMALIGN + free(p); +#else if (p) { free(*(void **) ((uintptr_t) p - MEM_ALIGN)); } +#endif } char * -- 1.8.3.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev