c++程序在运行时内存分配

news/2024/10/31 7:34:44/

一个c++程序运行的时候,会规划如下内存区域

1、栈stack,存放函数的参数值,局部变量的值等,由系统自动分配,自动释放。先进后出,内存是连续的。

2、堆heap,由程序员分配和释放,若频繁的申请而不释放,就会出现内存泄漏的问题,最后程序结束时可能由os回收。堆内存并不是连续的,更像是数据结构中的链表list。

3、全局静态区,存放全局变量静态变量,其中初始化的放在一起,非初始化的放在一起。程序结束后由os释放

4、常量区,存放常量,包括字符常量。程序结束后由os释放。

5、程序代码区,存放函数体二进制代码。

栈的简述

栈是一块连续的内存块,不大,超出就出现overflow报错,是从高地址向低地址寻址。由于栈内存是连续分配的,所以读取都比较快。

在函数调用的时候,首先把这个函数的下一个指令地址入栈,这样做是由于栈是先进后出,等调用完函数后得知道下一个调用地址是什么,让程序往下执行下去。

接着把函数的参数从右向左依次压入栈

然后是函数体内的局部变量压入栈,至于静态变量其他的不入栈。

入栈即占用,出栈即释放,而且都是顺序入栈,然后反顺序的出栈,所以就保证了栈的占用是连续性的,所以查找可用的栈内存是很快的。

堆的简述

堆很大,占用是不连续的,当你new一个对象的时候就分配内存,会查询os中的一个链表,这个链表记录可用堆内存的信息。每次查询都会遍历链表,直到找到第一个一块能装下这个对象的内存块,把占用的大小写入第一个地址,剩下的写对象。用不完,占用等这些改变都会在链表中更新信息。所以堆分配内存相对于栈是比较慢的。

如果你用完这个对象,该释放而不释放,那么这个对象对应的内存还是被占用的。这样的对象多了,就会有很多的内存被占用,就造成了内存泄漏。

如果一个指针定义了而没初始化,那么这个指针指向的可能是任意的内存地址,如果这个时候用了这个指针是非常危险的。

如果一个指针内存地址被回收了,但是这个指针没用设置成null,也是很危险的。


http://www.ppmy.cn/news/434299.html

相关文章

单片机内存及运行原理

一、单片机构成: 二、CPU的作用 三、内存管理 首先单片机的内存可以大小分为ram和rom,这里就不再解释ROM和RAM的区别了,我们可以将其等效为flash和sram,其中根据flash和sram的定义可得,flash里面的数据掉电可保存&…

单片机内存及运行

单片机内存及运行 内存 一般单片机内存分为RAM和FLASH。 比如STM32F103ZET6 /* Memories definition */ MEMORY { RAM (xrw) : ORIGIN 0x20000000, LENGTH 64K FLASH (rx) : ORIGIN 0x8000000, LENGTH 512K } RAM 随机存取存储器(英语:Random Acc…

分享一款多线程磁力搜索工具-聚磁帮

聚合多个磁力搜索平台的多线程磁力搜索帮助软件,磁力平台库实时更新维护,软件大小尽尽2MB,下载解压即可使用、绿色免安装。http://jcb.fageiwo.com/download/

偷偷收藏这5个在线资源网站,第二个BT搜索很强大!

偷偷收藏这5个在线资源网站,第二个BT搜索很强大! 好用的网站有那么多,今天给大家分享几个在线资源网站,不管是电影视频、还是图片资源以及办公资源,都应有尽有,肯定有你需要的哦,别告诉别人哦&…

利用Python爬虫建立自己的磁力搜索引擎

现在磁力站很多,但是搜出来的东西乱七八糟的,广告也多,我看多了觉得挺烦的,正好周末无聊,想着自己做一个,下面附上本次利用Python爬虫磁力站点的教程。 下面是我写爬虫时候主要引用的库 当然,抓…

自己做的在线云播安卓app 各种资源 磁力链播放

云盘现在地址 基于磁力链解析 在线云播做的app 可以体验下

磁力搜索

Torrent文件内的数据结构分为以下几部分: announce:Tracker的主服务器 announce-list:Tracker服务器列表 comment:种子文件的注释 comment.utf-8:种子文件注释的utf-8编码 creation date:种子文件建立的时间,是从1970年…

AntColony 磁力搜索BT引擎的核心

介绍 AntColony(Github)是findit磁力搜索引擎的核心。用来在DHT网络中,收集活跃资源的infohash,下载并解析资源的种子文件,存入数据库等。AntColony是若干功能的合集,也可以单独运行其中的部分功能&#x…