动态内存申请(Linux)
我们在C语言中学习过关于动态内存申请的相关操作,例如malloc
那么在Linux中也是相同的操作:我们以32位操作相同为例
我们知道,申请动态内存实质上就是从堆区(.heap)中申请,而在4G内存分布中,系统内核已经占去了1G的空间,而剩下的3个G还需要被这些区域共享,所以实际上我们从堆区申请的最大内存可能就是2.5G左右,但是 如果我们的虚拟机开启了虚拟内存的话,实际上可申请的就会比2.5G大了,例如我们虚拟机的虚拟内存是2G,此时,我们最大可从堆区申请的空间就是约4.5个G左右了
char* p=(char*)malloc(1024*1024*1024*4.5);
此时我们申请4.5G空间会成功嘛?
答案是:没有答案。
因为这个就要和实际情况联系在一起了,理论上会成功的,但是如果在申请的过程中有其他进程也调用了系统空间,此时就会申请失败。
这里我们有一点需要注意:
请大家猜一下,例如A物理内存(2G的空间 占用5%)B虚拟内存(2G的空间占用 0%)如果我们申请2G的空间,会发生什么样子的事情呢?
A(100%)B(5%)左右
为什么会发生这样的事情呢?
虚拟内存的作用就是,当我们的物理内存不够使用的时候,会将虚拟内存拿出来一部分去共享。
注意:此时共享出来的是暂时不会去调用的进程。
那么我们再猜测一下,此时free一下会发生什么样子的事情呢?
A(5%)B(5%)左右
为什么会这样呢?难道free后,物理内存不会将分出去的进程回收呢?
答案是:不会,只有在需要调用这些进程的时候,物理内存才会将这一部分进程回收。(收回来还要去管理,多麻烦啊,对吧,操作系统才没有这么傻呢)
但是但是但是 我们之前说的只是假设的情况,实际使用中 我们以32位操作系统为例,因为它就是4G的内存分布,所以我们理论上可申请的最大空间就是2.5G左右,超出范围就很有可能失败了。
那么我们在猜测一下,如果我们程序运行结束了,但是没有去free它
此时会不会存在内存泄漏?
答案是不会,因为我们虽然没有去手动释放我们申请的内存,但是当程序结束时,操作系统会自动回收所有被这个进程申请去的资源。
动态内存申请(Linux)相关推荐
- 动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间
动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间 1. 动态内存申请的底层系统调用 动态内存申请函数根据申请的内存大小选择不同的系统调用,小于128K选择brk系 ...
- C++---之动态内存申请new
一.为什么需要动态内存分配? 在C++程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的. 但是可能存在程序的内存需求只能在运行时确定的情况. 例如,当需要的内存取决于用户输入. 在这些 ...
- C/C++动态内存申请与释放
20.1 理解指针的两种"改变" 普通变量(非指针,简单类 型变量)只能改变值: 1) int a = 100; 2) ... 3) a = 200; 第 1 行代码,声明 ...
- c语言十七:动态内存申请
动态内存申请 一 动态内存申请 二 静态分配内存和动态分配内存 2.1 静态分配内存 2.2 动态分配内存 三 动态内存申请的相关函数 3.1 分配内存空间函数 malloc 3.2 free函数 ( ...
- 0x00007FF8DE6BD1E2 (ucrtbased.dll)处(位于 6-指针与动态内存申请.exe 中)引发的异常: 0xC0000005: 写入位置 0xFFFFFFFF9288D140
0x00007FF8DE6BD1E2 (ucrtbased.dll)处(位于 6-指针与动态内存申请.exe 中)引发的异常: 0xC0000005: 写入位置 0xFFFFFFFF9288D140 ...
- 二维数组的动态内存申请,采用子函数的方式 为二级指针申请内存,和释放内存
原理:二级指针,行指针+列指针 照着葫芦画瓢就行. 方法一:用c语言malloc实现 #include<cstdio> #include<iostream> #include& ...
- linux高端内存申请,Linux高端内存
高端内存是指物理地址大于 896M 的内存. 对于这样的内存,无法在"内核直接映射空间"进行映射. 为什么? 因为"内核直接映射空间"最多只能从 3G 到 4G ...
- c语言函数申请内存,c中动态内存申请的函数
C语言中,内存管理是通过专门的函数来实现的. (1)malloc函数: 用于分配若干字节的内存空间,并返回一个指向该内存空间首地址的指针变量. 若系统不能提供足够的内存单元,将会返回一个NULL,空指 ...
- C语言基础教程_动态内存申请
文章目录 前言 一.动态分配内存概述 二.静态分配.动态分配 2.1静态分配 2.2动态分布 三.动态分配函数 3.1 malloc 3.2 free 3.3 calloc 3.4 realloc 四 ...
最新文章
- 快速交付 敏捷开发的特点_什么是敏捷开发?它有什么特点
- ICO流程,casestudy
- Oracle WebLogic 最新补丁的绕过漏洞分析 cve-2020-2883
- McAfee.VirusScan.CommandLine.V.6.0.3
- 传统外贸不好做,为什么不来做跨境电商?
- Word在固定位置插入递增数字
- mysql数据库及应用_mysql数据库介绍及应用
- linux内核Kconfig语法
- 服务器项目白名单设置
- java中多线程重要吗_Java基础知识_多线程必要知识点
- 我的Android进阶之旅------>解决:Failed to create ‘XXX\build\outputs\apk\xxx.apks‘: 拒绝访问。
- 别乱说,算法才不是脑筋急转弯
- JS脚本defer的作用 (转自一路前行)
- 将CAD图纸中的线型和文字样式合并的方法技巧(二)
- ubuntu16.04运行PL-SVO
- 电子烟中测电阻注意事项
- php 获取ascii码,PHP实现ASCII码与字符串相互转换的方法
- 关于H5页面背景音乐播放的问题
- 结构化软件设计的具体步骤
- 概览嵌入式系统的各种周边设备
热门文章
- MyEclipse最新版-版本更新说明及下载 - MyEclipse官方中文网
- 这几个好用的去图片水印免费软件,你们知道吗?
- D1. Remove the Substring (从easy到hard)
- Rejecting re-init on previously-failed class java.lang.Class<org.apache.commons.httpclient.HttpClien
- 可以讲点风水,不能迷信风水,做好事情是关键
- 解决500 Internal Privoxy Error问题
- 共建共享做大5G“蛋糕”
- matlab根轨迹临界稳定,根轨迹分析:根轨迹分析稳定性
- 淘宝npm镜像源换新地址
- 有关Maven依赖中的version