内存管理(malloc和free的用法)
内存管理
1.堆和栈的区别:
1》栈的特征
1)、执行的速度相对较快;
2)、空间较小;
3)、生存期由系统决定;
4)、作用域较小;
5)、有名空间,可以通过变量名或者数据名访问;
2》堆的特征
1)、执行的速度相对较慢;
2)、空间较大;
3)、生存期由“自己”决定,malloc申请,free释放;
4)、作用域很大(整个程序都可以访问);
5)、无名空间,只能通过指针使用;
2.如何对堆空间申请
1》申请空间
#include <stdlib.h>
void *malloc(size_t size);
功能:在堆中申请空间
size:要申请的空间的大小(字节数)
返回值类型:void * 该类型表明malloc返回的地址空间中的数据类型是不确定,必须经过强制类型转换才可以使用。
返回值:成功时,返回malloc申请的空间的起始地址,失败时,返回NULL。
特点:----》malloc申请的空间为连续空间;
----》malloc申请的是没有初始化的空间;
void *calloc(size_t nmemb, size_t size);
特点:----》申请的空间是连续的;
----》申请的是已初始化的空间;
void *realloc(void *ptr, size_t size);
2》释放空间
#include <stdlib.h>
void free(void *ptr);
参数ptr:
1)不能传NULL;
2)不能给ptr传申请的空间的一部分,例如:
3)不能释放已经被释放的空间;
4)不能使用已经被释放的空间;
内存管理(malloc和free的用法)的更多相关文章
- 内存管理 malloc free 的实现
libc 中提供非常好用的 malloc free 功能,如果自己实现一个,应该怎么做. 要实现 malloc free 需要有 可以分配内存使用的堆,和记录内存使用情况的链表. 如下图所示,堆从高 ...
- 操作系统动态内存管理——malloc和free的工作机制
动态内存分配 就 是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法. malloc()是C语言中动态存储管理 的一组标准库函数之一.其作用是在内存的动态存储区中分配一个长度为size的 ...
- OC 内存管理-02 autorelease 概念 以及用法
(1) @autoreleasepool { }//自动释放池代表,池子将要被销毁,对池子中所有的对象进行一次release操作 (2) 不管你这个对象时在@autoreleasepool 之内创建的 ...
- 内存管理malloc 2
malloc可以在函数指针内使用.#include <stdio.h> #include <stdlib.h> char * get_string() { //char s[] ...
- Linux内存管理原理
本文以32位机器为准,串讲一些内存管理的知识点. 1. 虚拟地址.物理地址.逻辑地址.线性地址 虚拟地址又叫线性地址.linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻 ...
- Linux内存管理原理【转】
转自:http://www.cnblogs.com/zhaoyl/p/3695517.html 本文以32位机器为准,串讲一些内存管理的知识点. 1. 虚拟地址.物理地址.逻辑地址.线性地址 虚拟地址 ...
- Windows内存管理和linux内存管理
windows内存管理 windows 内存管理方式主要分为:页式管理,段式管理,段页式管理. 页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页:页式管理把内存空间按照页的大小划分成片或 ...
- 【转帖】linux内存管理原理深入理解段式页式
linux内存管理原理深入理解段式页式 https://blog.csdn.net/h674174380/article/details/75453750 其实一直没弄明白 linux 到底是 段页式 ...
- iOS的内存管理和引用计数规则、Block的用法以及三种形式(stack、malloc、global)
学习内容 iOS的内存管理和引用计数规则 内存管理的思考方式 自己生成的对象自己持有 非自己生成的对象自己也能持有 自己持有的对象不需要时释放 非自己持有的对象不能释放 ARC有效时,id类型和对象类 ...
随机推荐
- X86架构下Linux启动过程分析
1.X86架构下的从开机到Start_kernel启动的整体过程 这个过程简要概述为: 开机-->BIOS-->GRUB/LILO-->Linux Kernel 其执行的流程图和重要 ...
- cmd 批处理文件(.bat)文件的编写
1. 获取当前文件所在的路径信息 CMD获取当前目录的绝对路径 创建如下的名为 test.bat的文本文件: @echo off echo 当前盘符:%~d0 echo 当前盘符和路径:%~dp0 e ...
- bzoj2242 [SDOI2011]计算器——BSGS
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一次写BSGS,参考了好多好多博客: 然而看到的讲解和模板是一种写法,这道题的网上题 ...
- List 序列化
序列化list http://kchen.cnblogs.com/ 通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方法 通过序列化和反序列化泛型数据实体集合来实现持久化数据对象的方法 我们 ...
- PHPExcel读取文件日期处理,含时分秒(Thinkphp)
我们使用PHPExcel读取excel文件后发现,时间都是类似于这样的数字:41890.620138889,那么如何将它处理成我们想要的2014-09-08 14:53:00这样格式的日期呢,看代码: ...
- 巴什博弈------最少取件数 不是1的情况下 hdu---2897
最少取件数 是1的时候 核心代码是 // 共有 n 见 物品 一次最少取 一个 最多取 m 个 )==) printf("先取者输"); 在代码中 可以看到 题目中 一共 ...
- Elasticsearch之Hadoop插件的安装(图文详解)
这个Hadoop插件的安装是非常重要. Hadoop插件安装 在es的安装目录下 bin/plugin install elasticsearch/elasticsearch-repository-h ...
- Elasticsearch之sense插件的安装(图文详解)
sense插件可以方便的执行rest请求,但是中文输入的体验不是很好. 安装sense只需要在Kibana端安装插件即可,插件会自动安装到kibana的应用菜单中. [hadoop@master ki ...
- JS高级——静态成员与实例成员
静态成员:构造函数的属性和方法 实例成员:实例化之后对象的属性和方法 // $("#id").css(); // $("#id").text(); // $.t ...
- JS——select标签
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...