Do not bump to large size for page aligned request
This commit is contained in:
parent
8a56d6b636
commit
b35ac00d58
@ -288,7 +288,7 @@ sz_sa2u(size_t size, size_t alignment) {
|
|||||||
assert(alignment != 0 && ((alignment - 1) & alignment) == 0);
|
assert(alignment != 0 && ((alignment - 1) & alignment) == 0);
|
||||||
|
|
||||||
/* Try for a small size class. */
|
/* Try for a small size class. */
|
||||||
if (size <= SC_SMALL_MAXCLASS && alignment < PAGE) {
|
if (size <= SC_SMALL_MAXCLASS && alignment <= PAGE) {
|
||||||
/*
|
/*
|
||||||
* Round size up to the nearest multiple of alignment.
|
* Round size up to the nearest multiple of alignment.
|
||||||
*
|
*
|
||||||
|
13
src/arena.c
13
src/arena.c
@ -1049,10 +1049,17 @@ arena_palloc(tsdn_t *tsdn, arena_t *arena, size_t usize, size_t alignment,
|
|||||||
bool zero, tcache_t *tcache) {
|
bool zero, tcache_t *tcache) {
|
||||||
void *ret;
|
void *ret;
|
||||||
|
|
||||||
if (usize <= SC_SMALL_MAXCLASS
|
if (usize <= SC_SMALL_MAXCLASS) {
|
||||||
&& (alignment < PAGE
|
|
||||||
|| (alignment == PAGE && (usize & PAGE_MASK) == 0))) {
|
|
||||||
/* Small; alignment doesn't require special slab placement. */
|
/* Small; alignment doesn't require special slab placement. */
|
||||||
|
|
||||||
|
/* usize should be a result of sz_sa2u() */
|
||||||
|
assert((usize & (alignment - 1)) == 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Small usize can't come from an alignment larger than a page.
|
||||||
|
*/
|
||||||
|
assert(alignment <= PAGE);
|
||||||
|
|
||||||
ret = arena_malloc(tsdn, arena, usize, sz_size2index(usize),
|
ret = arena_malloc(tsdn, arena, usize, sz_size2index(usize),
|
||||||
zero, tcache, true);
|
zero, tcache, true);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user