解析STL中典型的内存分配
1 vector
在C++中使用vector应该是非常频繁的,但是你是否知道vector在计算内存分配是如何么?
在c++中vector是非常类似数组,但是他比数组更加灵活,这就表现在他的大小是可以自动分配的,就是当你的数据量增大的时候,自动的为你分配空间,当你的分配的大小不够的时候,他就会在分配的内存后边增加2倍大小的空间,
vector增加的空间是连续的,因此这个就涉及到了,当你在后边的空间不够的时候,那么计算机就会把你的数据copy一份空间更大的地方来给你分配足够的空间,这,就给计算机带来了不必要的性能损失。
因此,在设计程勋的时候,如果频繁的增加空间,插入数据的时候,,你就应该考虑其他容器,比如Deque 容器,
deque 和vector一样都是标准模板库中的内容,deque 是双端队列,在接口上和vector 非常相似,在许多操作的地方可以直接替换。假如读者已经能够有效地使用vector容器,下面提供deque的成员函数和操作,进行对比参考。
因为Deque使用的是非连续的内存空间,有效的利用了内存空间,如果想知道 vector和deque比较的话,
请查看这篇文章http://www.cnblogs.com/me115/archive/2010/10/15/1852432.html 我在这里不做过多解释。
stack和queue ,这个应该大家都知道堆栈和队列,这两个都不提供iterator操作。但是均可以作为list和deque的底层操作。
list ,双向链表,就是我们常说的环状的双向量表。list不是连续的内存空间,但是提供了iterator,环状的list在查找的等相当方便。。环状的list只需要一个标记,就可以完全的表示整个的list刻意的在环状的list尾端加一个空白节点,表示stl的前毕后开的区间。
slist也不是连续的内存空间。slist比list好用的空间更少。因为是单向的,因此有一些操作操作的速度更加快速。他无法提供向回的查找。因此slist使用insert和earse是相当不明智,因为他要重头查找。浪费时间了。
set set提供的是有排序的集合。自动排序。它属于红黑树的数据结构。
map,map在我们的程序是经常使用的,它提供了排序的功能和键值对的操作,通过key和value来查找。提供iterator. 推荐大家使用map
今天总结这些 更多文章,欢迎访问:http://blog.csdn.net/wallwind
解析STL中典型的内存分配的更多相关文章
- Java 中数组的内存分配
		Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ... 
- 第10课   C++中的动态内存分配
		C++中的动态内存分配 C语言是通过库函数来完成动态内存分配的,而C++是通过关键字从语言层面支持的. C语言中的malloc是基于字节来进行内存申请的,C++中是基于类型来进行的. delete加上 ... 
- C++解析(25):关于动态内存分配、虚函数和继承中强制类型转换的疑问
		0.目录 1.动态内存分配 1.1 new和malloc的区别 1.2 delete和free的区别 2.虚函数 2.1 构造函数与析构函数是否可以成为虚函数? 2.2 构造函数与析构函数是否可以发生 ... 
- JAVA中堆栈和内存分配原理
		1.栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ... 
- JAVA中堆栈和内存分配
		(一).栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或 ... 
- STL源代码剖析(一) - 内存分配
		Allocaor allocator 指的是空间配置器,用于分配内存.STL中默认使用SGI STL alloc作为STL的内存分配器,尽管未能符合标准规格,但效率上更好.SGI STL也定义有一个符 ... 
- 从malloc中窥探Linux内存分配策略
		malloc函数是C/C++中常用内存分配库函数,本篇文章将以Linux平台上的malloc为剖析对象,深入了解分配一块内存的旅程. malloc入门 使用malloc,需要包含头文 ... 
- 谈谈Keil 中C51的内存分配与优化
		本帖最后由 Cresta 于 2014-1-21 10:49 编辑 看到这篇C51的内存分配和优化的文章,个人觉得分析的十分到位,在这里转给大家 C51的内存分配不同于一般的PC,内存空间有限,采 ... 
- JAVA中堆栈和内存分配详解(摘抄)
		在Java中,有六个不同的地方可以存储数据: 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存 ... 
随机推荐
- 原创:LoadTest系列之参数时,设置提取参数的方式
			在对脚本进行参数化后,可以通过设置Data source最底层节点的属性Access Method来控制提取数据的方式. 1. 选中Data source的tables下的节点 2. 打开该节点的Pr ... 
- log4j配置日志系统
			1. lib里加入3个包 slf4j-api, slf4j-log4j12, log4j 2. 在src下 创建log4j.properties ### direct log messages to ... 
- 整理JRE瘦身或精简JRE
			http://blog.csdn.net/xiaoping8411/article/details/6973887 版权声明:本文为博主原创文章,未经博主允许不得转载. 前不久给朋友做了一个桌面程序, ... 
- python之路:进阶篇
			> ) { ; } printf(;} print i >>> >>> == : name == == ... 
- C# 开发系列(三)
			参考:http://stackoverflow.com/questions/11248935/passing-values-to-a-put-json-request-in-c-sharp 发送htt ... 
- php 设计模式系列(一)
			参考文章:http://duchengjiu.iteye.com/blog/2227452 多态代码 // 多态, 在JAVA中是这样用的, 其实在PHP当中可以自然消除, 因为参数是动态的, 你传什 ... 
- Runtime简介以及常见的使用场景(此内容非原创,为转载内容)
			Runtime简称运行时,是一套比较底层的纯C语言的API, 作为OC的核心,运行时是一种面向对象的编程语言的运行环境,其中最主要的是消息机制,Objective-C 就是基于运行时的. 所谓运行时, ... 
- 编译安装CoreSeek-4.1
			编译安装CoreSeek-4.1 yum -y install expat-devel* wget http://www.coreseek.cn/uploads/csft/4.0/coreseek- ... 
- CentOS 6.4 x64 Cacti 监控安装配置
			Cacti 监控安装配置 环境: 安装Cacti 的服务器 Linux 6.4 x64 ip 10.8.8.11 一: 配置iptables , selinux vi ... 
- 防止多个UIAlertView重叠弹出
			http://www.jianshu.com/p/7ac398ef4532 项目中可能会遇到这种情况,好几个alertView因为逻辑关系全部弹出,用户需要一个个的点击才能将所有的alertView取 ... 
