C/C++学习心得(二) 栈内存与堆内存的区别_Jackaroo_Exploiter的博客-程序员宝宝

技术标签: 扩展  编译器  存储  windows  delete  数据结构  

一:程序的内存分配

    栈区(stack)有编译器自动分配释放,存放函数的参数,局部变量等.

    堆区(heap)一般由程序员分配和释放,否则就由OS回收。堆用于存放全局变量,静态变量,常量字符串和函数代码(函数体的二进制代码).

二:申请后系统的响应

       栈:只要栈的剩余空间大于所申请的空间,系统将为程序提供内存,否则将报异常提示栈溢出。

       堆:在记录空闲内存地址的链表中寻找一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。另外,对于大多数系统会在这块内存空间的首地址出记录本次分配空间的大小,这样代码中的delete 才能正确释放本内存空间。系统会将多余的那部分重新空闲链表中。

三:申请大小的限制

       栈:在windows中,栈是向低地址扩展的数据结构,是一块连续的内存区域。也就是栈顶的地址和栈的最大容量(windows 2M )是系统规定好的。如果申请的空间超过剩余栈空间,将提示overflow,因此从栈获得的空间较小。

       堆:堆是向高地址扩展的数据结构,是不连续的内存区域。堆的大小受限于系统中有效的虚拟内存。由此可见堆的内存获得比较灵活,空间较大。

四:栈和堆的存储内容

       栈:在栈中,第一个进栈的是主函数下一条指令的地址,然后是函数的各个参数,在大多数编译器中,参数是由右往左入栈,然后是函数中的局部变量。注意,静态变量不入栈。出栈则刚好顺序相反。

       堆:一般在堆的头部用一个字节存放堆的大小,具体内容由程序员安排。

    

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Jackaroo_Exploiter/article/details/3291889

智能推荐

paxos分布式一致性算法_cuanqujt528301的博客-程序员宝宝

关于paxos的通俗解释,大家可以去围观以下两个博客:用三国场景展现paxos原理博文1:http://blog.csdn.net/russell_tao/article/details/7244530博文2:ht...

vue echarts 中国地图省级联动+散点图(各省json文件及china.js)[email protected]前端菜菜子的博客-程序员宝宝_中国地图json文件

最近用echarts 做个地图,省级联动,在网上找省市import'../node_modules/echarts/province/anhui.js'import'../node_modules/echarts/province/aomen'import'../node_modules/echarts/province/beijing'import'../node_modules/echarts/province/chongqing'import'../no...

ati-driver在2.16.18-gentoo-r2内核编译有问题及解决方法!!!_DemonHunter211的博客-程序员宝宝

今天把我的gentoo同步了一下,发现内核从2.16.17-gentoo-r8升级到了2.16.18-gentoo-r2,就直接make oldconfig,升级了内核,紧接着执行module-rebuild rebuild命令来重新编译依赖于内核的相关模块。发现在编译ati-driver的时候出现了错误,有两个常量声明无法找到:代码: CC [M] /var/tmp/portag

OpenFlow_柒拾柒_L的博客-程序员宝宝_openflow

OpenFlow概述Ethane项目:OpenFlow的前身(集中式,主动式,基于Flow的控制)OpenFlow的定义:是开放的南向接口、通用转发抽象模型、网络x86指令集

机器学习-白板推导-系列(五)笔记:降维(PCA/SVD/PCoA/PPCA)_流动的风与雪的博客-程序员宝宝

本博客为(系列五)的笔记,对应的视频是:【(系列五) 降维1-背景】、【(系列五) 降维2-样本均值&样本方差矩阵】、【(系列五) 降维3-PCA-最大投影方差】、【(系列五) 降维4-PCA-最小重构代价】、【(系列五) 降维5-SVD角度开看PCA和PCoA】、【(系列五) 降维6-主成分分析(PCA)-概率角度(Probabilistic PCA)】。

创建虚拟机+搭建ES集群_?luck的博客-程序员宝宝

虚拟机创建背景1、centos 7 系统文件链接: 阿里镜像2、VMware关键步骤文件为你在阿里镜像上下载的文件问题1)发现 ens33 没有 inet 这个属性,那么就没法通过IP地址连接虚拟机。1、root 用户下执行vi /etc/sysconfig/network-scripts/ifcfg-ens332、改为 yes 后重启网卡sudo service network restart...

随便推点

LinearList_baiduoWang的博客-程序员宝宝

1、线性表的定义    线性表是具有相同特性数据元素的一个有限序列。该序列中所含元素的个数叫做线性表的长度,用n(n>0)表示。n可以为0,表示该线性表是一个空表。2、线性表的逻辑特性    只有一个表头元素,只有一个表尾元素,表头元素没有前驱,表尾元素没有后继,除表头和表位元素之外,其他元素只有一个直接前驱,也只有一个直接后继。3、结构体定义#define maxSize 1

NVIDIA_CUDA版本查看方法_WIN10_珞沫的博客-程序员宝宝_nvidia 打开 cuda

CUDA版本环境:win10查看电脑显卡CUDA有以下两种方法:方法一:使用CMD查看打开电脑程序“命令提示符”,或者搜索框输入“CMD”。在命令行中输入 nvidia-smi方法二:在NVIDIA中查看1、打开NVIDIA控制面板点击“系统信息”,在弹出界面中点击“组件”,如图:...

ipad iphone开发_如何在iPhone或iPad上编辑视频_culinqian4296的博客-程序员宝宝

ipad iphone开发TRMK/ShutterstockTRMK /快门 It’s easier than ever to edit and share videos directly from your iPhone or iPad. In iOS 13, Apple added a range of new video-editing tools. You can now crop, ro...

linux打开log日志文件,linux下如何查看log文件_李大爷不注册不行吗的博客-程序员宝宝

满意答案日志文件夹的默认存储路径是:/var/log下面是几个重要的日志文件:/var/log/messages:包括整体系统信息,其中也包含系统启动期间的日志。此外,还包括mail,cron,daemon,kern和auth等内容。/var/log/syslog:它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息。/var/log/user.log:记录...

VC++把图像内容保存在数据库的例子_chulia的博客-程序员宝宝

VC++把图像内容保存在数据库的例子http://www.codefans.net/articles/1911.shtml VC++结合Access,把图片数据保存在Access数据库中,插入图像数据保存在数据库的相关字段中,这样移植软件比较方便,不过会使数据库迅速变大,可根据你的软件需求选择使用,下面是代码:  #include "stdafx.h"#in

智能优化算法:混合蛙跳算法-附代码_智能算法研学社(Jack旭)的博客-程序员宝宝_蛙跳算法

智能优化算法:混合蛙跳算法文章目录智能优化算法:混合蛙跳算法1.算法原理2.算法流程3.算法结果4.参考文献5.Matlab代码摘要:混合蛙跳算法(SFLA)是Eusuff等人 [1] 于2003年提出的一种基于群体的亚启发式协同搜索群智能算法. 该算法是建立在群中个体具有的模因进化和利用模因实现全局信息交换基础上的.具有概念简单、参数少、计算速度快、全局寻优能力强、易于实现等特点。1.算法原理混合蛙跳优化算法是模仿青蛙觅食过程中的群体信息交互机制而建立的一类智能计算优化算法。 该优化算法结合了模因