解析STL中典型的内存分配

原创 2012年03月23日 02:26:24

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六大组件之——分配器(内存分配,好深奥的东西)

SGI设计了双层级配置器,第一级配置器直接使用malloc()和free(),第二级配置器则视情况采用不同的策略:当配置区块超过128bytes时,视之为“足够大”,便调用第一级配置器;当配置区小于1...
  • md521
  • md521
  • 2014年12月20日 21:02
  • 3662

c++ STL容器的内存分配

一.前言在使用STL各类容器的时候,有时会出现迭代器失效,引用(指针)失效等情况的而发生,即使看似你的操作都是合法的情况下。要了解问题的原因,我们就要了解C++中stl容器的内存分配策略。我们才知道在...

不得不说的故事:STL内存管理

1. 概述 STL Allocator是STL的内存管理器,也是最低调的部分之一,你可能使用了3年stl,但却不知其为何物。 STL标准如下介绍Allocator the STL include...
  • yfkiss
  • yfkiss
  • 2011年07月25日 23:17
  • 8354

STL的内存分配(各种allocator)

有感于STL的内存管理   警告:本文是技术类文章,只适合码工们围观,非码工请跳过此坑 1. 背景 前些天在一个技术分享会上,某大牛说,STL使用了内存池,释放内存的时候,并不释放给OS,而...
  • xocoder
  • xocoder
  • 2013年04月04日 17:52
  • 4791

阻塞/非阻塞读写总结、tcp网络编程的本质、muduo::Buffer设计简介

一、阻塞/非阻塞读写总结 1、对于read 调用,如果接收缓冲区中有 20字节,请求读 100个字节,就会返回 20;对于 write调用,如果请求写 100个字节,而发送缓冲区中只有 20个...

muduo网络库学习之BlockinngQueue<T>类、ThreadPool 类、Singleton类封装中的知识点

一、BlockinngQueue类、BoundedBlockingQueue类 生产者消费者问题,可以用信号量+互斥锁 或者 条件变量+互斥锁 来解决,还分为有界和无界缓冲区两种情形,如下图: ...

STL vector内存分配测试笔记

vector 初始内存默认分配一个元素的内存长度,比如使用int声明的std::vector vec,初始内存只存在四个字节,可以调用vec.reserve(1024)分配1024个节点的内存。vec...
  • NavNet
  • NavNet
  • 2016年09月14日 11:20
  • 454

vector容器的内存分配——vector向量容器(补充)——STL Introduction

第一篇文章中提到vector容器的具有自动管理内存的功能。这里详细介绍vector容器的内存分配。  vector容器(或称vector类)将元素保存在连续的存储中。为了获得可接受的性能,vec...
  • yarsen
  • yarsen
  • 2012年10月08日 10:30
  • 1012

C++ STL中的vector的内存分配与释放

STL中vector的内存分配与正确释放 C++ STL中的vector的内存分配与释放 1.vector的内存增长vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:...

C++ STL中的vector的内存分配与释放

1.vector的内存增长 vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解析STL中典型的内存分配
举报原因:
原因补充:

(最多只允许输入30个字)