##### http://autoconf-archive.cryp.to/ax_check_page_aligned_malloc.html # # SYNOPSIS # # AX_CHECK_PAGE_ALIGNED_MALLOC # # DESCRIPTION # # Some operating systems (generally, BSD Unix variants) lack a # posix_memalign function, a memalign function, and a working # (meaning, the memory can be freed) valloc function. To make up for # it, the malloc function promises to return page-aligned addresses # if more than one page's worth of memory is allocated. # AX_CHECK_PAGE_ALIGNED_MALLOC checks for this condition and defines # HAVE_PAGE_ALIGNED_MALLOC if the condition holds. # # As an aside, note that valloc'd memory cannot safely be freed on # all operating systems. (Again, some flavors of BSD are the # troublemakers.) It's best to avoid using valloc in favor of # posix_memalign, memalign, or an aligned malloc as detected by # AX_CHECK_PAGE_ALIGNED_MALLOC. # # Caveat: AX_CHECK_PAGE_ALIGNED_MALLOC takes a probabalistic # approach. If 100 calls to malloc all return page-aligned addresses, # it assumes that all calls will behave likewise. It is therefore # possible -- albeit extremely unlikely -- that # AX_CHECK_PAGE_ALIGNED_MALLOC can return a false positive. # # LAST MODIFICATION # # 2005-01-22 # # COPYLEFT # # Copyright (c) 2005 Scott Pakin # # Copying and distribution of this file, with or without # modification, are permitted in any medium without royalty provided # the copyright notice and this notice are preserved. AC_DEFUN([AX_CHECK_PAGE_ALIGNED_MALLOC], [AC_CACHE_CHECK([if large mallocs guarantee page-alignment], [ax_cv_func_malloc_aligned], [AC_TRY_RUN([ #include #include #if HAVE_UNISTD_H # include #endif int main() { int pagesize = getpagesize(); int i; for (i=0; i<100; i++) if ((unsigned long)malloc(pagesize+1) & (pagesize-1)) exit (1); exit (0); } ], [ax_cv_func_malloc_aligned=yes], [ax_cv_func_malloc_aligned=no], [ax_cv_func_malloc_aligned=no]) ]) if test "$ax_cv_func_malloc_aligned" = yes ; then AC_DEFINE([HAVE_PAGE_ALIGNED_MALLOC], [1], [Define if `malloc'ing more than one page always returns a page-aligned address.]) fi ])