Skip to content

Commit 44374b5

Browse files
committed
Add a redirection layer for small alloc functions.
1 parent 7944d8f commit 44374b5

File tree

6 files changed

+27
-6
lines changed

6 files changed

+27
-6
lines changed

CMakeLists.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,19 @@ if(CONST_QUALIFIED_MALLOC_USABLE_SIZE)
169169
endif()
170170

171171

172+
# Build a redirection layer for all sizes that are a multiple of
173+
# 16bytes up to 1024.
174+
add_executable(generate src/redirect/generate.cc)
175+
target_link_libraries(generate snmalloc_lib)
176+
add_custom_target(generated ALL
177+
COMMAND generate ${CMAKE_CURRENT_BINARY_DIR}/generated.cc
178+
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/generated.cc
179+
)
180+
add_library(redirect_small STATIC src/redirect/redirect.cc)
181+
target_link_libraries(redirect_small snmalloc_lib)
182+
target_include_directories(redirect_small PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
183+
184+
172185
# To build with just the header library target define SNMALLOC_ONLY_HEADER_LIBRARY
173186
# in containing Cmake file.
174187
if(NOT DEFINED SNMALLOC_ONLY_HEADER_LIBRARY)

src/mem/alloc.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1250,7 +1250,6 @@ namespace snmalloc
12501250
small_dealloc_offseted_slow(super, p, slab->get_meta().sizeclass);
12511251
}
12521252

1253-
12541253
SNMALLOC_FAST_PATH void small_dealloc_offseted_inner(
12551254
Superslab* super, void* p, sizeclass_t sizeclass)
12561255
{

src/mem/sizeclass.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ namespace snmalloc
2020
constexpr static size_t
2121
sizeclass_to_inverse_cache_friendly_mask(sizeclass_t sc);
2222
constexpr static uint16_t medium_slab_free(sizeclass_t sizeclass);
23-
template<bool ASSUME_SMALL = false> static sizeclass_t size_to_sizeclass(size_t size);
23+
template<bool ASSUME_SMALL = false>
24+
static sizeclass_t size_to_sizeclass(size_t size);
2425

2526
constexpr static inline sizeclass_t size_to_sizeclass_const(size_t size)
2627
{

src/mem/sizeclasstable.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ namespace snmalloc
110110
return sizeclass_metadata.inverse_cache_friendly_mask[sizeclass];
111111
}
112112

113-
template <bool ASSUME_SMALL>
113+
template<bool ASSUME_SMALL>
114114
static inline sizeclass_t size_to_sizeclass(size_t size)
115115
{
116116
if ((size - 1) <= (SLAB_SIZE - 1) || ASSUME_SMALL)

src/override/malloc.cc

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,16 @@ extern "C"
7272
SNMALLOC_EXPORT
7373
void SNMALLOC_NAME_MANGLE(free_local_small)(void* ptr)
7474
{
75-
if (Alloc::small_local_dealloc(ptr)) return;
75+
if (Alloc::small_local_dealloc(ptr))
76+
return;
7677
ThreadAlloc::get_noncachable()->small_local_dealloc_slow(ptr);
7778
}
7879

7980
SNMALLOC_EXPORT
8081
void* SNMALLOC_NAME_MANGLE(malloc_small)(size_t size)
8182
{
82-
return ThreadAlloc::get_noncachable()->small_alloc<NoZero, YesReserve>(size);
83+
return ThreadAlloc::get_noncachable()->small_alloc<NoZero, YesReserve>(
84+
size);
8385
}
8486

8587
SNMALLOC_EXPORT
@@ -88,6 +90,12 @@ extern "C"
8890
return ThreadAlloc::get_noncachable()->small_alloc<NoZero, YesReserve>(64);
8991
}
9092

93+
SNMALLOC_EXPORT
94+
void* SNMALLOC_NAME_MANGLE(malloc_small_63)()
95+
{
96+
return ThreadAlloc::get_noncachable()->small_alloc<NoZero, YesReserve>(63);
97+
}
98+
9199
SNMALLOC_EXPORT
92100
size_t SNMALLOC_NAME_MANGLE(malloc_usable_size)(
93101
MALLOC_USABLE_SIZE_QUALIFIER void* ptr)

src/test/func/malloc/malloc.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ int main(int argc, char** argv)
131131

132132
constexpr int SUCCESS = 0;
133133

134-
for (size_t i = 1; i < SLAB_SIZE; i+=16)
134+
for (size_t i = 1; i < SLAB_SIZE; i += 16)
135135
{
136136
test_local(i);
137137
}

0 commit comments

Comments
 (0)