Bildirim
void *aligned_alloc(size_t alignment, size_t size); (C11)
Açıklama
Bellek başlangıç adresi değeri alignment parametre değerinin katı olan ve size parametre değeri kadar büyüklükte bellek tahsis eder. Size parametre değeri alignment parametre değerinin katı olmalıdır.
Size parametre değeri kadar büyüklükte tahsis edilen belleğin başlangıç adresinin alignment değerinin katı olması garanti edilir.
Parametreler
alignment: Tahsis edilecek belleğin başlangıç adresinin katlarını belirleyen değeri gösterir.
size: Ayrılacak byte miktarını gösteren bir değerdir. Alignment parametre değerinin katı olmalıdır.
Dönüş değeri
Başarı durumunda, yeni ayrılan belleğin başlangıç değerini gösteren bir işaretçi geri döndürür. Bellek kullanımı sona erdikten sonra, geri döndürülen işaretçi free() veya realloc() fonksiyonu ile boşaltılmalıdır.
Hata durumunda, NULL bir işaretçi geri döndürülür.
Örnek
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *cp1 = malloc(100*sizeof(cp1));
printf("Ön tanımlı bellek miktarına göre tahsis edilen bellek başlangıç adresi: %p\n", (void*)cp1);
free(cp1);
char *cp2 = aligned_alloc(256, 256*sizeof(cp2));
printf("256 byte bellek miktarına göre tahsis edilen bellek başlangıç adresi: %p\n", (void*)cp2);
free(cp2);
return 0;
}
Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:
Ön tanımlı bellek miktarına göre tahsis edilen bellek başlangıç adresi: 0x5565a231d260 256 byte bellek miktarına göre tahsis edilen bellek başlangıç adresi: 0x5565a231e600
Yukarıdaki program, malloc() fonksiyonu ile yaptığı bellek tahsisinde bellek başlangıç adresini sistem ön tanımlı kat değerine uygun olarak, aligned_alloc() fonksiyonu ile yaptığı bellek tahsisinde ise, 256 değerinin katı olacak şekilde belirler.