发新帖我要提问
12
返回列表
打印
[生态工具]

内存函数

[复制链接]
楼主: maqianqu
手机看帖
扫描二维码
随时随地手机跟帖
21
MYWX| | 2025-5-14 09:46 | 只看该作者 回帖奖励 |倒序浏览
内存函数主要有以下几方面作用:

  * **内存分配**
    * **`malloc`** :`malloc` 是 “memory allocation” 的缩写,用于在程序运行过程中动态分配指定大小的内存块。例如:`int *ptr = (int*)malloc(sizeof(int) * 10);` 这行代码分配了大小为 40 个字节(假设 `int` 占 4 个字节)的内存空间,用于存储 10 个整数。它返回指向分配内存块的起始地址的指针,如果分配失败,返回空指针。
    * **`calloc`** :全称是 “contiguous allocation”,它与 `malloc` 类似,但分配的是连续的多个内存块,并且会自动初始化为零。例如:`int *ptr = (int*)calloc(10, sizeof(int));` 同样分配了存储 10 个整数的内存空间,而且这些内存空间中的值被初始化为 0。
    * **`realloc`** :用于重新调整之前已经分配内存的块的大小。当已经分配的内存空间不够用或者想要调整大小时,可以使用这个函数。例如:`ptr = (int*)realloc(ptr, sizeof(int)*20);` 将之前分配的内存空间大小调整为 20 个整数的大小。如果调整成功,返回新的内存块的起始地址;如果失败,返回空指针,但原来的内存块仍然有效。

  * **内存释放**
    * **`free`** :当动态分配的内存不再使用时,必须使用 `free` 函数释放内存空间,以便让系统可以重新管理这些内存,避免内存泄漏。例如:`free(ptr);` 释放指针 `ptr` 指向的内存块,释放后,指针本身仍然存在,但其指向的内存被系统回收,此时不应该再访问该指针指向的内存。

  * **内存操作**
    * **`memcpy`** :用于将一块内存中的内容复制到另一块内存中。例如:`memcpy(dest, src, n);` 将 `src` 指向的内存块中的前 `n` 个字节复制到 `dest` 指向的内存块中。要求源内存块和目标内存块不能重叠,否则可能会出现未定义的行为。
    * **`memmove`** :与 `memcpy` 功能相似,但允许源内存块和目标内存块重叠。它在处理重叠内存复制时更加安全可靠。
    * **`memset`** :用于将指定内存块中的每个字节设置为指定的值(取值范围是 0 - 255)。例如:`memset(buffer, 0, sizeof(buffer));` 将数组 `buffer` 中的所有字节都设置为 0,常用于内存初始化为全零的情况。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则