Linux内存管理

四个内存区间

  • 代码区
    存放程序中的代码,只读
  • 全局变量与静态变量区
    在程序编译时分配好,程序运行时一直存在,如:全局变量、静态变量、字符串常量
  • 局部变量区(栈)
    在执行函数时,函数内局部变量可以在栈上自动创建,函数执行结束时这些存储单元自动被释放,局部变量区只有8M
  • 动态存储区(堆)D
    在程序运行时才能确定,无法预先分配空间,只能动态人为分配到堆区

动态内存的申请和释放

malloc

#include <stdlib.h>
void *malloc(size_t size)//size为字节数,成功返回起始地址,失败返回NULL

返回值是 void *,根据实际情况,将 void *转换成所需要的指针类型,内存中的内容需要自行初始化

free

#include <stdlib.h>
void free(void *ptr);//ptr指的是需要释放的内存的起始地址 

free释放完后应该将指针置为NULL

野指针

野指针指的是指向“垃圾”内存的指针,产生原因包括:

  • 指针变量没有被初始化
  • 指针被free之后没有置为NULL
  • 指针操作超越了变量的作用范围

发表评论

您的电子邮箱地址不会被公开。