STL笔记1
顺序容器有vector、list、deque。
关联容器有map、set。
容器类自动申请和释放内存,无需new和delete操作。
但是需要连接STL各个容器的内存管理
STL六大组件:
容器,算法,迭代器,仿函数、适配器和空间配置器
容器:容纳一组元素的对象
迭代器:提供一种访问容器中每一个元素的方法
适配器:用来修饰容器,比如queue和stack,底层借助了deque。
空间适配器:负责空间配置和管理
空间配置器:
对象构造前的空间配置和对象析构后的空间释放,由负责。
设计哲学如下:
先system heap要求空间
考虑多线程状态
考虑内存不足时的应变措施
考虑碎片问题
对于碎片问题,有双层及配置器:
第一级直接使用allocate()调用malloc()、deallocate()调用free(),使用类似new_handler机制解决内存不足(抛出异常),配置无法满足的问题(如果在申请动态内存时找不到足够大的内存块,malloc 和new 将返回NULL 指针,宣告内存申请失败)。
第二级视情况使用不同的策略,当配置区块大于128bytes时,调用第一级配置器,当配置区块小于128bytes时,采用内存池的整理方式:配置器维护16个(128/8)自由链表,负责16种小型区块的此配置能力。内存池以malloc配置而得,如果内存不足转第一级配置器处理。
1、第一级配置器详解
2、第二级空间配置器详解
第二级空间配置器实际上是一个内存池,维护了16个自由链表。自由链表是一个指针数组,有点类似与hash桶,它的数组大小为16,每个数组元素代表所挂的区块大小,比如free list[0]代表下面挂的是8bytes的区块,free list[1]代表下面挂的是16bytes的区块…….依次类推,直到free _ list[15]代表下面挂的是128bytes的区块。
3、空间配置器存在的问题
自由链表所挂区块都是8的整数倍,因此当我们需要非8倍数的区块,往往会导致浪费。
由于配置器的所有方法,成员都是静态的,那么他们就是存放在静态区。释放时机就是程序结束,这样子会导致自由链表一直占用内存,自己进程可以用,其他进程却用不了。
各种容器的特点和适用情况:
vector:可变大小的数组,支持快速随机访问,在尾部之外的位置插入或删除元素会较慢。
deque:双端队列,支持快速随机访问,在头尾位置插入删除速度快。
list:双向链表,只支持双向顺序访问,在list任何位置插入/删除速度都很快。
forward_list:单向链表,只支持单向顺序访问
array:固定大小的数组支持随机访问,不能添加或者删除元素。
string:和vector相似,随机访问快,在尾位置插入/删除元素快。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python爬虫入门教程 39-100 天津市科技计划项目成果库数据抓取 scrapy
爬前叨叨 缘由 今天本来没有打算抓取这个网站的,无意中看到某个微信群有人问了一嘴这个网站,想看一下有什么特别复杂的地方,一顿操作下来,发现这个网站除了卡慢,经常自己宕机以外,好像还真没有什么特殊的.... 爬取网址 http://cgk.kxjs.tj.gov.cn/navigation.do 有很明显的分页表示 列表如下 Request URL: http://cgk.kxjs.tj.gov.cn/navigation.do Request Method: POST 参数说明,里面两个比较重要的 pageNum 页码,numPerPage 每页显示的数据 trades: fields: enterprise_type: archive_year: hsql: searchKey: pageNum: 2 numPerPage: 25
- 下一篇
推荐6款免费cms内容管理建站系统
CMS是"Content Management System"的缩写,意为"网站管理系统",也叫智能建站系统或自助建站系统,注意这里要和在线建站区分,cms是可以下载的,用户可以获取到网站源码,cms可以理解为一个已经开发好的网站,已经集成了很多常用的功能,用户下载后直接可以使用,不需要再找人开发,节约了建站时间和成本,CMS系统往往是开源的型式出现,并提供免费下载,开源并不是不赢利,开源是让更多的使用者都来使用这系统软件,他们会发现更多BUG,代码安全或者在使用中会结合现代网站提出新的需求,大量的爱好者开发出新功能和风格模板,这就是我们所说的二次开发。 一套好的CMS系统往往不会采用别人的框架,优秀的cms都是自己开发底层框架。并以标签型式前后端分离,我们只需懂点相关语言和HTML,css就能自己制作网站模板,无疑对网站建设者或网络公司来说都大大提高了开发效率。 CMS系统安装简单,开发团队会开发安装以网址/install/的形式访问地址即可安装,填上数据库下一步就OK。目前CMS系统以PHP或.Net居多,JAVA由于其并不免费,所以使用成本也偏高,还没有出名的系统。 目前国内80...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Hadoop3单机部署,实现最简伪集群
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS6,7,8上安装Nginx,支持https2.0的开启