跳到主要内容

内存管理 (Memory Management)

C 语言中,内存管理分为自动分配和手动分配。

内存布局

  1. 代码段 (.text):存储程序的机器代码。
  2. 数据段 (.data):存储已初始化的全局变量和静态变量。
  3. BSS 段:存储未初始化的全局变量。
  4. 堆 (Heap):用于程序运行时的动态内存分配。
  5. 栈 (Stack):用于函数调用的参数传递、返回地址和局部变量。

栈与堆的区别

  • :自动分配,自动释放,速度快,空间有限。
  • :手动分配,手动释放,空间大,速度相对较慢。

动态内存分配

stdlib.h 中提供:

  • malloc(size_t size):分配指定字节的内存,返回 void*
  • free(void *ptr):释放已分配的内存。
  • calloc(size_t num, size_t size):分配内存并初始化为零。
  • realloc(void *ptr, size_t new_size):重新调整内存大小。
int *p = (int*)malloc(sizeof(int) * 10);
if (p == NULL) { /* 处理分配失败 */ }
free(p); // 必须释放,防止内存泄漏

内存泄漏 (Memory Leak)

分配了内存但没有在合适的时机释放。

  • 长期运行可能导致系统内存耗尽。
  • 工具:Valgrind 用于检测内存泄漏。