c++中的内存分配方式有几种?

c++中的内存分配方式有几种?,第1张

内存的三种分配方式:\x0d\x0a1. 从静态存储区分配:此时的内存程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储。\x0d\x0a2. 在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限。\x0d\x0a3. 在堆区分配:动态分穗睁滑配内猜腊存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题。\x0d\x0a\x0d\x0a常见内存错误及对策\x0d\x0a1. 内存分配未成功,却被使用。\x0d\x0a对策:使用内存之前检查是否分配成功。用p!=NULL判断。\x0d\x0a2. 内存分配成功,未初始化就被使用。\x0d\x0a内存的缺省值没有统一的标准。大部分编译器以0作为初始值,但不完全是。\x0d\x0a对策:内存初始化时赋初值。\x0d\x0a3. 内存 *** 作越界。\x0d\x0a对策:只能是小心了。\x0d\x0a4. 释放了内存,仍然使用。\x0d\x0a(1) 使用显示delete和free的野指针。\x0d\x0a对早迅策:释放完内存,将指针置为NULL。\x0d\x0a(2) 使用隐式delete和free的野指针。主要是指函数返回指向栈内存的指针或引用。\x0d\x0a对策:当然是不要返回就可以了。\x0d\x0a5. 未释放内存,导致内存泄露。\x0d\x0a用new/malloc开辟了内存,没用delete/free释放.\x0d\x0a对策:new和delete的个数一定相同;malloc和free的个数一定相同;new[]和[]delete一定对应。

内存袜伍手分配方式有三种:

1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

3、从堆告嫌上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就橘斗有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。

程序中动态分配的内存存放在堆内存区域。

叫“堆”。c语言:char *p1//若是全局量,则在全局未初始化区,若是局部量,则在栈中。p1 = (char *)malloc(10)//分配余祥得来得10字节的区域在堆区。

c++语言: 用 new分配,用 delete释放,在 堆区。用malloc分配,用 free释放,在类似堆区的自由存储区。堆散毁高不同于栈,它的数据结构并非由系统(无论是机器系统还是 *** 作系统)支持,而是由函数库提供的。

直接方式:

当时多道程序技术还没出现,存储器的可用空间一般是给定的。那时程序员在编程序时或编译程序对源程序进行编译时,使用实际的存储器地址,这种分配方式使用户与计算机内存直接打交道。

系统资源在某一时刻为一个用户所独占。当多道程序出现时就使用户感到极不方便,因为用户要自己做主存的分配工作,而且内存不止存放一个作业,这要求用户必须知道每一个作业放在主存的什么地方,这无疑增加了用户的负担,况且存储空冲尺间的利用率也相当低。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8274368.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存