关于malloc申请内存
来源:互联网 发布:频无损剪切软件 编辑:程序博客网 时间:2024/05/16 01:48
自学笔记(一)
个人理解
linux内存采用分页的内存管理,而32位pc机还采用了段式内存管理,它的地址关系为:逻辑地址--->虚拟地址(也叫线性地址)--->物理地址。
linux所有段基地址都为0,所以可以看做linux并没有采用段式的内存管理,linux的地址关系:虚拟地址--->物理地址
因为,linux会为每个进程分配独立的进程地址空间(大小为3GB),这里的地址指的是虚拟地址并不是实际意义上的物理地址,通过map映射到对应的物理地址。
malloc()
malloc申请内存返回的是虚拟地址而不是物理地址,而且,返回的这个虚拟地址是没有map映射到物理内存中的,只有当程序(进程)用到访问了这个地址的时候,
内核才响应“缺页异常”,才回去映射一块物理地址。
关于malloc(0) 能申请成功是肯定的,它返回的是虚拟地址(对应的物理地址还不确定的),在你没用到这块地址空间的时候,它不会再物理上开辟内存。
在你用到malloc(0)返回的地址时,因为参数为0,缺页异常不会为你的进程空间申请额外内存。所以这个指针应该是不能用的。
关于虚拟地址
可以把一个程序运行3次,为了保证程序一直运行可以在程序中加10秒的延迟。可以看到这3个进程的使用的地址是一样的(虚拟地址),映射的物理地址肯定不一样的。
- 关于malloc申请内存
- malloc动态申请内存
- 关于STM32能否使用malloc申请动态内存的问题
- 关于STM32能否使用malloc申请动态内存的问题
- malloc最大内存申请量
- malloc最大内存申请量
- 关于指针和数组对申请内存malloc和作为参数传递的一些问题
- new malloc 内存申请转储
- malloc,free动态申请释放内存机制
- 内存申请malloc可能引发的问题
- 【VS开发】malloc申请内存错误分析
- malloc、calloc、realoc申请堆内存
- 关于用malloc函数申请0字节内存的进一步讨论——《C语言深度解剖》笔记
- 关于内存申请的问题
- C 笔记 free()释放一个非malloc() 申请的内存
- c++ malloc/free、new/delete 内存申请函数比较
- malloc申请内存时一定要有sizeof(char)
- malloc与free 动态内存的申请与释放
- Android开发之XML文件解析
- File not found: MaskProp.dcu
- Matlab中的取整函数fix, floor, ceil与round
- Wikioi P1026 逃跑的拉尔夫
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- 关于malloc申请内存
- cmd下运行java程序
- VS2010 安装 Boost 库 1.54
- <link href ="css/index.css" rel="Stylesheet" type="text/css" />
- 一句话总结Windbg 32位版本和64位版本的选择
- IOS成长之路-实现界面切换和数据的传递
- Oracle Data Integrator 介绍
- uva 101 - The Blocks Problem
- 自学设计模式--1 单例模式