Aligned allocation
This commit is contained in:
parent
eedaf13eff
commit
a47d3fe0cf
1 changed files with 37 additions and 0 deletions
37
align_alloc.c
Normal file
37
align_alloc.c
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
#include <assert.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#define ALLOC_SZ 128
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
/* glibc defaults to 16 byte alignment with regular malloc on x86_64, and 8 byte for x86 */
|
||||||
|
char *mem = aligned_alloc(32, ALLOC_SZ);
|
||||||
|
char *mem2 = NULL;
|
||||||
|
|
||||||
|
int memalign_status = posix_memalign((void **)&mem2, ALLOC_SZ, ALLOC_SZ);
|
||||||
|
assert(memalign_status != ENOMEM);
|
||||||
|
assert(memalign_status != EINVAL); // Fails on non-power-of-two alignment
|
||||||
|
|
||||||
|
char *mem3 = valloc(getpagesize());
|
||||||
|
int pgsize = getpagesize();
|
||||||
|
printf("Page size: %d\n", pgsize);
|
||||||
|
|
||||||
|
memset(mem, 'B', ALLOC_SZ);
|
||||||
|
memset(mem2, 'C', ALLOC_SZ);
|
||||||
|
memset(mem3, 'A', getpagesize());
|
||||||
|
|
||||||
|
assert((uintptr_t)mem3 % 4096 == 0);
|
||||||
|
assert((uintptr_t)mem2 % 128 == 0);
|
||||||
|
assert((uintptr_t)mem % 32 == 0);
|
||||||
|
|
||||||
|
free(mem);
|
||||||
|
free(mem2);
|
||||||
|
free(mem3);
|
||||||
|
|
||||||
|
printf("Passed!\n");
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue