社区
C++ 语言
帖子详情
new申请内存多次后为什么会有内存碎片?
我要戒烟了
2010-04-08 10:52:09
如果内存碎片多的话会出现什么情况?
...全文
465
18
打赏
收藏
new申请内存多次后为什么会有内存碎片?
如果内存碎片多的话会出现什么情况?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
skyworth98
2010-05-25
打赏
举报
回复
呵呵,你可想象内存是一大块面包,然后你要切下其中的某些块……
tfeitian
2010-05-25
打赏
举报
回复
[Quote=引用 14 楼 herocxw2005 的回复:]
举个例子:
如果你只像内存要空间,而你程序运行完后又不把得到的空间给释放出来,后果可想而知了。别说2G内存,就是100G内存也会迅速的给用完的。呵呵
好借好还,再借不难。
借了不还,损人不利己。
呵呵,LZ应该明白了吧。
[/Quote]
这个应该是内存泄露吧,与内存碎片是两个概念
delphiwcdj
2010-04-08
打赏
举报
回复
[Quote=引用 8 楼 inzaghi97 的回复:]
内存碎片多了除了性能会下降外,会不会导致程序申请不到内存而使调用malloc时直截挂掉?
[/Quote]
一般都要对malloc的返回值进行判断
我要戒烟了
2010-04-08
打赏
举报
回复
内存碎片多了除了性能会下降外,会不会导致程序申请不到内存而使调用malloc时直截挂掉?
bsr2009
2010-04-08
打赏
举报
回复
看看操作系统的教材就知道了.
lovesi3344
2010-04-08
打赏
举报
回复
new申请内存多次后为什么会有内存碎片
所以
分10次new一个整型的变量 比 new一个10个整型的数组 占的空间多
liuharris
2010-04-08
打赏
举报
回复
因为new申请了内存空间如果不用delete释放的话,会导致内存泄露的。你动态申请的内存,被分配出去了如果不回收,就不能继续被其他进程利用,就变成了内部碎片,另外,一些没有被分配出去的内存由于大小太小了无法分配给申请内存空间的新进程的内存空闲区域就变成了外部碎片。
碎片多了当然就会影响内存的使用啦,对大文件的读入很大影响啊,处理的时间多了速度就慢了
_JeffreyWu
2010-04-08
打赏
举报
回复
找个内存整理工具整理下
jbz001
2010-04-08
打赏
举报
回复
其实和硬盘差不多一个道理
senr0816
2010-04-08
打赏
举报
回复
内存碎片多,对后面稍大内存的申请带来麻烦
jackyjkchen
2010-04-08
打赏
举报
回复
磁盘用多了为什么会有碎片?都是存储器,一个道理
YT158828
2010-04-08
打赏
举报
回复
记得delete就是了...
zwlzhj
2010-04-08
打赏
举报
回复
这也就涉及到代码的规范和效率的问题,楼上基本回答了你的疑问。
herocxw2005
2010-04-08
打赏
举报
回复
举个例子:
如果你只像内存要空间,而你程序运行完后又不把得到的空间给释放出来,后果可想而知了。别说2G内存,就是100G内存也会迅速的给用完的。呵呵
好借好还,再借不难。
借了不还,损人不利己。
呵呵,LZ应该明白了吧。
sxcnfly
2010-04-08
打赏
举报
回复
如果你经常分配小内存,势必会出现碎片,最好自己写一个小内存管理。
dream17953
2010-04-08
打赏
举报
回复
同意楼上的
na2650945
2010-04-08
打赏
举报
回复
[Quote=引用 5 楼 liuharris 的回复:]
因为new申请了内存空间如果不用delete释放的话,会导致内存泄露的。你动态申请的内存,被分配出去了如果不回收,就不能继续被其他进程利用,就变成了内部碎片,另外,一些没有被分配出去的内存由于大小太小了无法分配给申请内存空间的新进程的内存空闲区域就变成了外部碎片。
碎片多了当然就会影响内存的使用啦,对大文件的读入很大影响啊,处理的时间多了速度就慢了
[/Quote]
学习。
Julykey
2010-04-08
打赏
举报
回复
建议看一下操作系统吧,在不断的申请过程中,势必会有一些小的内存是你用不到的。相当于在一间房间里你堆东西,肯定有一些小角落是你不能利用的,一个道理
如何减少频繁分配
内存
(malloc或者
new
)造成的
内存
碎片
?
内存
池(Memory Pool)是一种
内存
分配方式。 通常我们习惯直接使用
new
、malloc等API
申请
分配
内存
,这样做的缺点在于:由于所
申请
内存
块的大小不定,当频繁使用时
会
造成大量的
内存
碎片
并进而降低性能。
内存
池则是在真正使用
内存
之前,先
申请
分配一定数量的、大小相等(一般情况下)的
内存
块留作备用。当有新的
内存
需求时,就从
内存
池中分出一部分
内存
块,若
内存
块不够再继续
申请
新的
内存
。这样做的一个显著
虚拟
内存
与物理
内存
与
内存
碎片
-杂谈
内存
杂谈 虚拟
内存
与物理
内存
为什么要有虚拟
内存
??? 1.每个进程有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址(每个进程都假设自己看到的是完整的从0开始的
内存
) 2.程序可以使用一系列虚拟地址来访问大于可用物理
内存
的
内存
缓冲区。当物理
内存
的供应量变小时,
内存
管理器
会
将物理
内存
页(通常大小为 4 KB)保存到磁盘文件。数据或代码页
会
根据需要在物理
内存
与磁盘之间移动。(如linux...
内存
碎片
是怎样产生的
malloc/free或
new
/delete大量使用后回造成
内存
碎片
,那么这种
碎片
形成的机理是什么? 如果机理是
申请
的
内存
空间大小(太小)所形成的,那么,
申请
多大的区域能够最大限度的避免
内存
碎片
呢?(这里的避免不是绝对的避免,只是一种概率)
内存
碎片
一般是由于空闲的连续空间比要
申请
的空间小,导致这些小
内存
块不能被利用。产生
内存
碎片
的方法很简单,举个例: 假设有一
分配
内存
时如何减少
内存
碎片
(四)
malloc/free或
new
/delete大量使用后回造成
内存
碎片
,那么这种
碎片
形成的机理是什么? 如果机理是
申请
的
内存
空间大小(太小)所形成的,那么,
申请
多大的区域能够最大限度的避免
内存
碎片
呢?(这里的避免不是绝对的避免,只是一种概率)
内存
碎片
一般是由于空闲的连续空间比要
申请
的空间小,导致这些小
内存
块不能被利用。产生
内存
碎片
的方法很简单,举个例: 假设有
malloc、free与
内存
碎片
malloc和free大量使用后回造成
内存
碎片
,那么这种
碎片
形成的机理是什么? 如果机理是
申请
的
内存
空间大小(太小)所形成的,那么,
申请
多大的区域能够最大限度的避免
内存
碎片
呢?(这里的避免不是绝对的避免,只是一种概率)
内存
碎片
一般是由于空闲的连续空间比要
申请
的空间小,导致这些小
内存
块不能被利用。 产生
内存
碎片
的方法很简单,举个例:
C++ 语言
64,644
社区成员
250,475
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章