malloc(内存管理)

内存管理:
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的程序是否存在内存泄漏
==================================================


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值