free_aligned_sized函数
概要:
#include <stdlib.h>
void free_aligned_sized(void *ptr, size_t alignment, size_t size);
描述:
该函数释放参数ptr指向的内存;释放后内存管理函数可以进一步分配该处内存。
如果参数ptr是空指针,或者通过aligned_alloc函数调用得到的结果,其中参数alignment等于内存分配时请求的内存对齐方式,并且参数size等于内存分配时请求的分配大小,则该函数等价于free(ptr);否则该函数行为是未定义的。
malloc、realloc、calloc函数调用得到的结果不能传递给free_aligned_sized函数。
参数:
void *ptr
指向分配内存的指针。
size_t alignment
分配内存的对齐方式。
size_t size
分配内存的大小。
返回值:
无
范例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
/*函数free_aligned_sized范例*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
double *ptr = NULL;
size_t alignment = sizeof(double);
size_t size;
double sum = 0.0;
int ch;
puts("Input the number of elements.");
if(scanf("%zu", &size) != 1 || size == 0)
{
puts("Invalid input.");
return EXIT_FAILURE;
}
/*清空输入缓冲区。*/
while(((ch = getchar()) != '\n') && (ch != EOF))
;
/*分配内存。*/
ptr = aligned_alloc(alignment, size*sizeof(double));
if(ptr == NULL)
{
puts("Memory allocation failed.");
return EXIT_FAILURE;
}
/*向分配的内存中写入内容。*/
puts("Input the value of elements.");
for(size_t i=0;i<size;++i)
{
if(scanf("%lf", ptr+i) != 1)
{
puts("Invalid input.");
free_aligned_sized(ptr, alignment, size*sizeof(double));
return EXIT_FAILURE;
}
sum += ptr[i];
}
printf("Average value: %.2f\n", sum/size);
/*释放内存。*/
free_aligned_sized(ptr, alignment, size*sizeof(double));
return 0;
}
|
可能结果:
该程序先分配一块内存,然后向其写入若干个double类型浮点数,最后输出平均值并释放内存。
(注:编译时实现还未支持free_aligned_sized函数。)
相关内容:
主要参考资料:
1、ISO/IEC 9899:2024