简历知识点

 

  

 

智能指针

 

C++11常用特性的使用经验总结

 

面试题23. 链表中环的入口结点

 

面试题24. 反转链表

 

面试题9. 用两个栈实现队列

 

题目二:用两个队列实现一个栈

 

面试题7. 重建二叉树

 

 

BST树(二叉搜索树)特点:

 

AVL树特点:

  1. 具有二叉查找树的全部特性。
  2. 每个节点的左子树和右子树的高度差至多等于1。

 

红黑树

 

 STL空间配置器及内存优化原理

参考回答:

1)二级配置器结构
STL 内存管理使用二级内存配置器。

1、第一级配置器
第一级配置器以 malloc(),free(),realloc()等 C函数执行实际的内存配置、释放、重新配置等操作,并且能在
内存需求不被满足的时候,调用一个指定的函数。
一级空间配置器分配的是大于 128 字节的空间
如果分配不成功,调用句柄释放一部分内存
如果还不能分配成功,抛出异常

2、第二级配置器
在 STL 的第二级配置器中多了一些机制,避免太多小区块造成的内存碎片,小额区块带来的不仅是内存碎片,
配置时还有额外的负担。区块越小,额外负担所占比例就越大。

3、分配原则
如果要分配的区块大于 128bytes,则移交给第一级配置器处理。
如果要分配的区块小于 128bytes,则以内存池管理(memory pool),又称之次层配置(sub-allocation):每
次配置一大块内存,并维护对应的 16 个空闲链表(free-list)。下次若有相同大小的内存需求,则直接从 free-
list 中取。如果有小额区块被释放,则由配置器回收到 free-list 中。
当用户申请的空间小于 128 字节时,将字节数扩展到 8 的倍数,然后在自由链表中查找对应大小的子链表
如果在自由链表查找不到或者块数不够,则向内存池进行申请,一般一次申请 20 块
如果内存池空间足够,则取出内存
如果不够分配 20 块,则分配最多的块数给自由链表,并且更新每次申请的块数
如果一块都无法提供,则把剩余的内存挂到自由链表,然后向系统 heap 申请空间,如果申请失败,则看看自由
链表还有没有可用的块,如果也没有,则最后调用一级空间配置器

2)二级内存池
二级内存池采用了 16 个空闲链表,这里的 16 个空闲链表分别管理大小为 8、16、24......120、128 的数据块。
这里空闲链表节点的设计十分巧妙,这里用了一个联合体既可以表示下一个空闲数据块(存在于空闲链表中)
的地址,也可以表示已经被用户使用的数据块(不存在空闲链表中)的地址。 

 

二分查找 :

判断大小端:

堆排:

快排:

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值