-
Notifications
You must be signed in to change notification settings - Fork 34
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This adds a new `sdallocx` function to the external API, allowing the size to be passed by the caller. It avoids some extra reads in the thread cache fast path. In the case where stats are enabled, this avoids the work of calculating the size from the pointer. An assertion validates the size that's passed in, so enabling debugging will allow users of the API to debug cases where an incorrect size is passed in. The performance win for a contrived microbenchmark doing an allocation and immediately freeing it is ~10%. It may have a different impact on a real workload. Closes #28
- Loading branch information
1 parent
c3f8650
commit 4cfe551
Showing
10 changed files
with
201 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
#include "test/jemalloc_test.h" | ||
|
||
#define MAXALIGN (((size_t)1) << 25) | ||
#define NITER 4 | ||
|
||
TEST_BEGIN(test_basic) | ||
{ | ||
void *ptr = mallocx(64, 0); | ||
sdallocx(ptr, 64, 0); | ||
} | ||
TEST_END | ||
|
||
TEST_BEGIN(test_alignment_and_size) | ||
{ | ||
size_t nsz, sz, alignment, total; | ||
unsigned i; | ||
void *ps[NITER]; | ||
|
||
for (i = 0; i < NITER; i++) | ||
ps[i] = NULL; | ||
|
||
for (alignment = 8; | ||
alignment <= MAXALIGN; | ||
alignment <<= 1) { | ||
total = 0; | ||
for (sz = 1; | ||
sz < 3 * alignment && sz < (1U << 31); | ||
sz += (alignment >> (LG_SIZEOF_PTR-1)) - 1) { | ||
for (i = 0; i < NITER; i++) { | ||
nsz = nallocx(sz, MALLOCX_ALIGN(alignment) | | ||
MALLOCX_ZERO); | ||
ps[i] = mallocx(sz, MALLOCX_ALIGN(alignment) | | ||
MALLOCX_ZERO); | ||
total += nsz; | ||
if (total >= (MAXALIGN << 1)) | ||
break; | ||
} | ||
for (i = 0; i < NITER; i++) { | ||
if (ps[i] != NULL) { | ||
sdallocx(ps[i], sz, | ||
MALLOCX_ALIGN(alignment)); | ||
ps[i] = NULL; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
TEST_END | ||
|
||
int | ||
main(void) | ||
{ | ||
|
||
return (test( | ||
test_basic, | ||
test_alignment_and_size)); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters