Skip to content

Commit

Permalink
Provide option to CMake for Page Size (#664)
Browse files Browse the repository at this point in the history
* Pickup page size from unistd.h

This uses the PAGESIZE constant from the unistd.h on POSIX.
This should make the code more resilient to being compiled on platforms with
different page sizes.

* Allow pagesize to come from cmake.

* Update src/snmalloc/pal/pal_posix.h

Co-authored-by: Nathaniel Filardo <105816689+nwf-msr@users.noreply.github.com>

---------

Co-authored-by: Nathaniel Filardo <105816689+nwf-msr@users.noreply.github.com>
  • Loading branch information
mjp41 and nwf-msr committed Sep 25, 2024
1 parent fb776da commit ab4fe84
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
4 changes: 4 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ endif()
set(SNMALLOC_MIN_ALLOC_SIZE "" CACHE STRING "Minimum allocation bytes (power of 2)")
set(SNMALLOC_MIN_ALLOC_STEP_SIZE "" CACHE STRING "Minimum allocation step (power of 2)")

set(SNMALLOC_PAGESIZE "" CACHE STRING "Page size in bytes")

set(SNMALLOC_DEALLOC_BATCH_RING_ASSOC "" CACHE STRING "Associativity of deallocation batch cache; 0 to disable")
set(SNMALLOC_DEALLOC_BATCH_RING_SET_BITS "" CACHE STRING "Logarithm of number of deallocation batch cache associativity sets")

Expand Down Expand Up @@ -257,6 +259,8 @@ add_as_define_value(SNMALLOC_MIN_ALLOC_STEP_SIZE)
add_as_define_value(SNMALLOC_DEALLOC_BATCH_RING_ASSOC)
add_as_define_value(SNMALLOC_DEALLOC_BATCH_RING_SET_BITS)

add_as_define_value(SNMALLOC_PAGESIZE)

target_compile_definitions(snmalloc INTERFACE $<$<BOOL:CONST_QUALIFIED_MALLOC_USABLE_SIZE>:MALLOC_USABLE_SIZE_QUALIFIER=const>)

# In debug and CI builds, link the backtrace library so that we can get stack
Expand Down
10 changes: 9 additions & 1 deletion src/snmalloc/pal/pal_posix.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#endif
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
Expand Down Expand Up @@ -129,8 +130,15 @@ namespace snmalloc
| Entropy
#endif
;

#ifdef SNMALLOC_PAGESIZE
static_assert(
bits::is_pow2(SNMALLOC_PAGESIZE), "Page size must be a power of 2");
static constexpr size_t page_size = SNMALLOC_PAGESIZE;
#elif defined(PAGESIZE)
static constexpr size_t page_size = max(Aal::smallest_page_size, PAGESIZE);
#else
static constexpr size_t page_size = Aal::smallest_page_size;
#endif

/**
* Address bits are potentially mediated by some POSIX OSes, but generally
Expand Down

0 comments on commit ab4fe84

Please sign in to comment.