C 语言内存管理与动态内存分配
在 C 语言中,内存管理是开发者必须掌握的核心技能。与高级语言不同,C 不会自动帮你回收垃圾,这意味着你需要手动控制内存的分配与释放。理解这一点,不仅能写出更高效的代码,更能避免程序崩溃和安全漏洞。
内存布局概览
要管好内存,先得知道它长什么样。C 程序的内存通常分为四个主要区域:
- 代码区:存放编译后的机器指令和只读常量。
- 数据区:存放全局变量和静态变量,生命周期贯穿整个程序运行期。
- 堆区(Heap):程序员手动管理的区域,用于动态分配内存。
- 栈区(Stack):存放函数局部变量、参数及调用信息,随函数进出自动管理。
其中,我们今天要重点讨论的是堆区的动态分配。静态分配在编译时确定大小,而动态分配则允许程序在运行时根据需求灵活调整。
核心工具:动态内存分配函数
C 标准库提供了四个关键函数来处理堆内存:malloc、calloc、realloc 和 free。
1. malloc:按需分配
malloc 是最常用的函数,它申请指定字节的内存空间,但不初始化内容。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n = 5;
// 分配 5 个整型大小的内存
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("内存分配失败!\n");
return -1;
}
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < n; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
free(arr);
;
}


