企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
堆常见的操作函数有以下几个: * void \*malloc(size\_t size) : 从堆中申请内存空间。 * void \*calloc(size\_t nmemb, size\_t size) : 从堆中申请内存空间并清零。 * void \*realloc(void \*ptr, size\_t size) : 调整已从堆中申请到的内存大小。 * void free(void \*ptr) : 释放从堆中申请到的内存空间。 以上的API需要包含头文件: #include <stdlib.h> ### * void \*memset(void \*s, int c, size\_t n) : 给内存空间格式化为指定值。 * void bzero(void \*s, size\_t n) : 给内存空间清零。 以上的API需要包含头文件: #include <string.h> ![](https://img.kancloud.cn/87/37/8737a4cf4209ec7c7228f4b65754d0d3_790x546.png =600x) ### **1.malloc以及内存清零** malloc返回值非NULL时表示成功,程序中没有做这个判断,出于严谨考虑大家在调用时最好做下判断;同时除非申请的空间极其巨大或者有内存泄漏,不然基本不会出现失败的情况。清零的方式有两种,可以使用memset,也可以使用bzero,建议使用bzero直观一点。 ### **2.realloc** 该函数使用时需要注意,失败时会返回NULL,且先前分配的堆内存空间是不会被回收的,因此我们在调用该函数之前需要备份一下已申请的内存空间地址,这样申请失败的话还可以找回之前的数据;同时需要注意的是,重新申请成功后多出来的那部分内存空间有可能是没有被清零的,需要我们手动调用bzero进行清零。 ### **3.释放内存** 所有从堆中成功申请到内存空间,都需要通过free函数进行手动回收,不然会造成内存泄漏。 ### **4.内存拷贝** 从一片内存拷贝数据到另外一片内存可以使用函数:memcpy,比如: ![](https://img.kancloud.cn/db/0c/db0c3e2de6818cb194ad59cf1c83ec86_760x240.png =600x) ### 把content栈空间内容(hello world!)拷贝到堆中(pa)。