内存管理:
Makefile
内存管理 ==》每一个进程都有4G的虚拟内存
虚拟内存的划分:
由低地址向高地址:
代码段==》静态(常量)存储区==》堆区==》栈区==》OS
内存管理区域==》静态存储区、栈区、堆区
内存管理方式==》申请 释放
静态存储区:申请 程序启动时候变量定义
释放 程序结束自动释放
注意:在运行期间,静态存储区只能用不能放
栈区:申请 在作用范围内的第一次变量申请
释放 作用域结束的位置自动释放
注意:栈区申请的变量一定要初始化,否则会有随机值
堆区:申请 使用malloc函数向系统申请变量空间
释放 使用free函数显示释放
注意:申请和释放必须完整,否则会存在内存泄漏
堆区内存管理:==》stdlib.h
1、申请 void *malloc(size_t size);
功能:向操作系统申请指定大小的空间。
参数:size要申请的空见大小,单位字节
返回值:void* 纯地址
成功 返回申请到的内存空间
失败 NULL
2、释放 void free(void *ptr);
功能:将之前申请的内存释放
参数:ptr是void *的纯地址,要释放的内存地址
返回值:无
练习:分别向堆区申请以下类型变量并保存数据
char float 字符串
内存管理中堆区使用的雷区
1、申请不一定成功,malloc的返回值
2、申请成功不一定能用,清空内存
3、使用过程中不能越界
4、释放要完整
5、释放后一定要归0并保证单次释放
perror
#include <stdio.h>
void perror(const char* s)
功能:打印系统中的标准错误
参数:字符串
返回值:无
bzero
#include <string.h>
void bzero(void *s, size_t n);
功能:清除大小为n的数组
参数:指针或数组 ,大小
返回值:无
memset
#include <string.h>
void *memset(void *s, int c, size_t n);
功能:将数组中的字符设定为特定的c
参数:
返回值:成功 字符串的首地址
失败 NULL
valgrind-3.2.3.tar.bz2工具的使用
1、安装
tar -jxvf valgrind-3.2.2.tar.bz2
cd ./valgrind
./configure //Valgrind requires glibc version 2.2 - 2.5
make
make install
2、安装
valgrind-3.8.1-3.2.el6.i686.rpm
3、使用
valgrind --tool=mencheck ./a.out
//第三方工具 valgrind 的内存检测功能
//检测自己的a.out的程序是否存在内存泄漏
==================================================