C动态内存分配
C动态内存分配是在C语言中为了实现动态内存分配而进行的手动内存管理。这种管理是通过C標準函式庫中的malloc
、realloc
、calloc
、free
等函数进行的。[1][2]
一般 |
---|
杂项 |
C++ 为了兼容 C 语言也提供这些函数,但是更推荐使用 new
、delete
操作符来完成类似的操作。[3]
malloc
所实际使用的内存分配机制有很多不同的实现,执行时间和内存消耗各有不同。
函数概述
C 动态内存分配函数在头文件 stdlib.h
中声明(C++ 中对应的头文件名称为 cstdlib
)。[1]
函数 | 描述 |
---|---|
malloc |
分配指定数量的字节 |
realloc |
调整指定内存块的大小,必要时会重新分配 |
calloc |
分配指定数量的字节,并初始化为 0 |
free |
释放指定的内存块 |
类型安全
malloc
所执行的内存分配基于字节数而不是类型,其返回类型为 void 指针(void *
),表示该指针所指向区域的数据类型未知。C++ 由于其强类型系统,实际使用该指针时需要进行强制类型转换,而 C 语言中则不必进行。
int * ptr;
ptr = malloc(10 * sizeof(int)); /* 不进行强制类型转换 */
ptr = (int *)malloc(10 * sizeof(int)); /* 进行强制类型转换 */
参考资料
- (PDF). . p. 313, § 7.20.3 "Memory management functions" [2018-07-25]. (原始内容存档 (PDF)于2018-01-27) (英语).
- Godse, Atul P.; Godse, Deepali A. . p. 6-28: Technical Publications. 2008: 400. ISBN 978-81-8431-496-0 (英语).
- Stroustrup, Bjarne. . 1009, §27.4 Free store: Addison Wesley. 2008: 1236. ISBN 978-0-321-54372-1 (英语).
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.