内存分区
- 代码区: 存放函数体的二进制代码,由操作系统进行管理(cpu执行的机器指令,共享只读)
- 全局区(全局静态区): 存放全局变量和静态变量以及常量(包含const)
- 栈区: 由编译器自动分配释放,存放函教的参数值,局部变量等
- 堆区: 由程序员分配和释放,若程序员不释放程序结束时由操作系统回收

#include <stdio.h>
char s[1024] = {1,2,3};
int main(int argc, const char *argv[])
{
return 0;
}
#动态内存分配
申请空间
#include <stdlib.h>void *malloc(size_t size);- 参数:所需申请空间的大小
- 返回值:
释放空间
#include <stdlib.h>void free(void *ptr);- 参数:malloc的地址
- 返回值:无
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *fun(int size)
{
char *p = (char *)malloc(size);
strcpy(p,"****");
return p;
}
int main()
{
char *p = fun(10);
printf("结果:%s\n",p);
free(p);
p = NULL;
return 0;
}
内存泄漏
- 内存泄漏(memory leak):是指申请的内存空间使用完毕之后未回收。一次内存泄露危害可以忽略,但若一直泄漏,无论有多少内存,迟早都会被占用光,最终导致程序crash。(因此,开发中我们要尽量避免内存泄漏的出现)
内存溢出
- 内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间供其使用。通俗理解就是内存不够用了,通常在运行大型应用或游戏时,应用或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。最终导致机器重启或者程序crash