Do not bump to large size for page aligned request

This commit is contained in:
Yinan Zhang 2020-08-25 14:30:37 -07:00
parent 8a56d6b636
commit b35ac00d58
2 changed files with 11 additions and 4 deletions

View File

@ -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.
* *

View File

@ -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 {