Implement posix_memalign

This commit is contained in:
Peter Limkilde Svendsen
2019-05-30 18:20:22 +02:00
parent dab6530fb4
commit 02d1a7fe6f
2 changed files with 94 additions and 0 deletions
+73
View File
@@ -12,10 +12,13 @@ int main(void) {
size_t sample_realloc_size = sample_alloc_size + 1;
/* ensure values are mapped to variables */
size_t zero = 0;
size_t max_size = SIZE_MAX;
size_t aligned_alloc_alignment = 128;
size_t aligned_alloc_goodsize = 256;
size_t aligned_alloc_badsize = 257;
size_t nonpow2_mul_voidptr_size = 3*sizeof(void *);
size_t pow2_mul_voidptr_size = 4*sizeof(void *);
int i;
@@ -139,4 +142,74 @@ int main(void) {
printf("valloc (SIZE_MAX) : %p, errno: %d = %s\n",
ptr_valloc_maxsize, valloc_maxsize_errno,
strerror(valloc_maxsize_errno));
errno = 0;
void * ptr_posix_memalign = NULL;
int posix_memalign_return = posix_memalign(&ptr_posix_memalign, pow2_mul_voidptr_size, sample_alloc_size);
int posix_memalign_errno = errno;
printf("posix_memalign:\n");
printf(" %p, return value: %d = %s,\n",
ptr_posix_memalign,
posix_memalign_return, strerror(posix_memalign_return));
/* strerror() can only be called once in a printf call for correct
* results */
printf(" errno: %d = %s\n",
posix_memalign_errno,
strerror(posix_memalign_errno));
errno = 0;
void * ptr_posix_memalign_align0 = NULL;
int posix_memalign_align0_return = posix_memalign(&ptr_posix_memalign_align0, zero, sample_alloc_size);
int posix_memalign_align0_errno = errno;
printf("posix_memalign (alignment 0):\n");
printf(" %p, return value: %d = %s,\n",
ptr_posix_memalign_align0,
posix_memalign_align0_return,
strerror(posix_memalign_align0_return));
printf(" errno: %d = %s\n",
posix_memalign_align0_errno,
strerror(posix_memalign_align0_errno));
errno = 0;
void * ptr_posix_memalign_nonpow2mul = NULL;
int posix_memalign_nonpow2mul_return = posix_memalign(&ptr_posix_memalign_nonpow2mul, nonpow2_mul_voidptr_size, sample_alloc_size);
int posix_memalign_nonpow2mul_errno = errno;
printf("posix_memalign (non-power-of-two multiple of sizeof(void *)):\n");
printf(" %p, return value: %d = %s,\n",
ptr_posix_memalign_nonpow2mul,
posix_memalign_nonpow2mul_return,
strerror(posix_memalign_nonpow2mul_return));
printf(" errno: %d = %s\n",
posix_memalign_nonpow2mul_errno,
strerror(posix_memalign_nonpow2mul_errno));
errno = 0;
void * ptr_posix_memalign_size0 = NULL;
int posix_memalign_size0_return = posix_memalign(&ptr_posix_memalign_size0, pow2_mul_voidptr_size, zero);
int posix_memalign_size0_errno = errno;
printf("posix_memalign (size 0):\n");
printf(" %p, return value: %d = %s,\n",
ptr_posix_memalign_size0,
posix_memalign_size0_return,
strerror(posix_memalign_size0_return));
printf(" errno: %d = %s\n",
posix_memalign_size0_errno,
strerror(posix_memalign_size0_errno));
errno = 0;
void * ptr_posix_memalign_maxsize = NULL;
int posix_memalign_maxsize_return = posix_memalign(&ptr_posix_memalign_maxsize, pow2_mul_voidptr_size, max_size);
int posix_memalign_maxsize_errno = errno;
printf("posix_memalign (SIZE_MAX):\n");
printf(" %p, return value: %d = %s,\n",
ptr_posix_memalign_maxsize,
posix_memalign_maxsize_return,
strerror(posix_memalign_maxsize_return));
printf(" errno: %d = %s\n",
posix_memalign_maxsize_errno,
strerror(posix_memalign_maxsize_errno));
}