![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CPP内存管理
文章平均质量分 94
CPP的一些内存管理的那些事
Tongpvp
这个作者很懒,什么都没留下…
展开
-
CPP内存管理(三)
上述的分配策略,总的思想是一个分段管理。至于为什么有16个头,32个组,1个头管理1M内存,这些都是经验值,有利于操作系统。全回收的动作会被延缓,并不会只要归还所有内存之后就把这么多段的内存整合还给操作系统(defer)。当第二个全回收出现的时候才会把内存归还操作系统。原创 2024-05-05 00:25:58 · 1004 阅读 · 1 评论 -
CPP内存管理(二)
然后需要malloc对应的大小,但是此时若系统的heap大小为10000,而此时已分配的为9688,此时再向重新malloc会失败,此时会和后边的链表借,因为#8后面的#9此时满足,从中切除72B分配给用户,此时pool剩余80-72=8B。申请8B的大小,发现#0为空,但是此时pool不为空,且这个pool可以提供,但是这时候pool可以提供不止20个,编译器也只会提供最多20个,并从中分配一块给用户,此时pool剩余240-8*20=80。已分配的内存会将地址返回给用户,所以不需要使用这个指针。原创 2024-05-03 01:27:12 · 780 阅读 · 1 评论 -
CPP内存管理(一)
如果用户调用new申请一块内存,如果由于系统原因或者申请内存过大导致申请失败,这时将抛出异常,在一些老的编译器中可能会直接返回0,可以参考上图右边代码,当无法分配内存时,operator new()函数内部将调用_calnewh()函数,这个函数通过左边的typedef传入,看程序员是否能自己写一个handler处理函数来处理该问题。上图演示了如何让重载::operator new()函数,但是一般不推荐重载::operator new()函数,因为对全局有影响,使用不当容易造成问题。原创 2024-04-30 23:42:17 · 856 阅读 · 1 评论