首页 > 系统相关 >内存分配

内存分配

时间:2022-08-18 15:12:41浏览次数:56  
标签:释放 动态分配 编译器 内存 全局 分配

参考:https://blog.csdn.net/weixin_50901683/article/details/113774484

一、内存分为四个区:代码区、全局区、栈区、堆区

程序运行前:在程序编译后,生成exe可执行程序,未执行程序前分为两个区域:代码取、全局区

代码区:存放函数体的二进制代码

全局区:这块内存在程序的整个运行期间都会存在,全局区上的数据在程序结束后由系统释放(不是函数结束后释放)
1,全局变量
2,静态变量:static关键字
3,常量区:字符串常量 + const修饰的全局常量(局部常量不在全局区)

程序运行后:

栈区(stack): 
1,由编译器自动分配和释放,在函数执行完后自动释放。从高地址向低地址增长
2,存放的是运行时函数分配的局部变量,函数参数,返回数据,返回地址等参数
3,不要返回局部变量的地址,栈区开辟的数据如果再去操作这个内存,但这个内存已经不属于你了
4,效率高,但是分配的内存容量有限

堆区(heap):
1,由程序员手动分配和释放。若程序员不释放,则程序结束是由os回收。从低地址向高地址增长
2,容量大于栈,程序中动态分配的内存在此区域。
3,c++中主要用new开辟内存,释放用delete
4,内存泄漏、内存碎片

二、内存分区的意义:

不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程

三、堆和栈的区别

1,管理方式不同:栈由编译器自动申请和释放空间,堆需要程序员手动申请和释放空间。
2,空间大小不同:栈的空间有限,32位平台下,VC6下默认为1M,而堆最大可以达到4G。
3,能否产生碎片
4,生长方向的不同:堆的生长方向是向上的,也就是向着内存地址增加的方向,而栈刚好是相反的,栈是向着内存减小的方向生长的(因为栈的空间十分有限,所以栈是从上限往栈的下限生长的)
5,分配的方式不同:堆都是动态分配的,没有静态能进行分配的堆。而栈有静态分配和动态分配两种分配方式。
静态分配是编译器完成的,比如局部变量的分配,动态分配在C++中由new函数进行分配。请注意:栈的动态分配和堆的是不同的,栈的动态分配由编译器进行释放,无需使用delete进行释放。
alloca()函数作用:这个函数的作用是可以从栈里动态分配内存
6,分配的效率不同:栈的效率比堆要高很多


标签:释放,动态分配,编译器,内存,全局,分配
From: https://www.cnblogs.com/cc-world/p/16598641.html

相关文章

  • 如何从内存存储的角度解释小端和大端格式的概念?
    字节序(大、小端存储)是指字节存储在内存中的顺序。内存通常是字节可寻址的,但大多数计算机体系结构都适用于32位大小或字大小(4字节)的操作数。因此,要将一个字存储到字节......
  • 堆外内存的回收机制分析
    堆外内存JVM启动时分配的内存,称为堆内存,与之相对的,在代码中还可以使用堆外内存,比如Netty,广泛使用了堆外内存,但是这部分的内存并不归JVM管理,GC算法并不会对它们进行回收,所......
  • k8s 集群节点 SLUB: Unable to allocate memory on node -1 cgroup 内存泄露问题
    1.原因cgroup的kmemaccount特性在3.x内核上有内存泄露问题,如果开启了kmemaccount特性会导致可分配内存越来越少,直到无法创建新pod或节点异常几点解释:kmema......
  • 视频融合云服务EasyCVR平台如何切换为内存模式?
    EasyCVR平台具备较强的视频能力,可支持海量设备接入、视频监控、视频录像、云存储、回放与检索、智能告警、平台级联等功能。平台可将分散在各处的视频监控资源进行统一接入......
  • iis占用服务器内存,W3wp.exe 进程占用内存高消耗CPU近100%导致网站反应速度缓慢的解决
    iis占用服务器内存,W3wp.exe进程占用内存高消耗CPU近100%导致网站反应速度缓慢的解决方案如何降低W3WP.EXE占用的内存和CPU?结合网上的诸多建议,主要的解决办法是:a.在I......
  • String在内存中如何分布
    一、设计思想及原理设计思想1、字符串分配和其他的对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能。2、JVM......
  • Cache写策略:Cache和内存的友好沟通
    出现背景本质上是上级存储器对下级存储器的写操作,没别的 算法当Cache命中时(要写的块正好在Cache里)1、全写法Cache来全写了,CPU在尽力写了,内存在干啥?#内存状态就是说......
  • linux 命令查看内存和cpu信息
    linux命令查看内存和cpu信息1、查看CPU信息命令cat/proc/cpuinfo2、使用top命令查看CPU的使用情况top3、free命令查看内存free4、df(diskfree):显示磁盘分区上......
  • 内存管理
    内存管理不同语言的内存管理不同语言的内存管理方式:C/C++这种内存堆空间的申请和释放完全靠自己管理Java依赖JVM来做内存管理,不了解jvm内存管理的机制,很可能会因......
  • PerfView专题 (第五篇):如何寻找 C# 托管内存泄漏
    一:背景前几篇我们聊的都是非托管内存泄漏,这一篇我们再看下如何用PerfView来排查托管内存泄漏,其实托管内存泄漏比较好排查,尤其是用WinDbg,毕竟C#是带有丰富的元数据......