后端
C 内存模型
内存四区
| 区域 | 存放内容 | 特点 | 管理方式 |
|---|---|---|---|
| 代码区 | 程序代码 | 共享性、只读性 | 系统管理 |
| 全局区 | 全局变量、静态变量、常量 | 程序结束释放 | 系统管理 |
| 栈区 | 局部变量、形参 | 即用即去 | 编译器自动管理 |
| 堆区 | 动态分配内存 | 手动释放 | malloc/free |
变量分类
| 类型 | 定义位置 | 所属区域 | 示例 |
|---|---|---|---|
| 全局变量 | 函数外部 | 全局区 | int a = 10; |
| 局部变量 | 函数内部 | 栈区 | int main() { int a = 10; } |
| 静态变量 | static 修饰 | 全局区 | static int a = 10; |
| 全局常量 | const 修饰全局 | 全局区 | const int a = 10; |
| 局部常量 | const 修饰局部 | 栈区 | const int a = 10; |
动态内存分配
malloc 函数
- 作用:在堆区分配内存
- 语法:
void* malloc(size_t size); - 释放:
free(void* ptr);
示例
c
#include <stdio.h>
#include <stdlib.h>
int main() {
// 分配4个整型的内存空间
int* p = (int*)malloc(4 * sizeof(int));
if (p != NULL) {
// 使用分配的内存
for (int i = 0; i < 4; i++) {
p[i] = i + 1;
}
// 打印值
for (int i = 0; i < 4; i++) {
printf("%d ", p[i]);
}
printf("\n");
// 释放内存
free(p);
p = NULL; // 避免野指针
}
return 0;
}