SGI STL

C++ 标准模板库介绍(STL)

心不动则不痛 提交于 2021-02-03 07:04:05
<p style="color: #AD5D0F;font-weight: bold;font-size: 20px; font-family: '微软雅黑';">1. STL 基本介绍</p> ------ <p style="font-size: 15px;text-indent:2em;letter-spacing:1px; font-family: '微软雅黑';">C++ STL(标准模板库)是惠普实验室开发的一系列软件的统称,是一套功能强大的 C++ 模板类。STL的目的是为了<font color="#ff0000">标准化组件</font>,这样就不用重新开发,让后来者可以使用现成的组件,和开源组件有点殊途同归。 STL的版本很多,常见的有<font color="#ff0000">HP STL、PJ STL、 SGI STL</font>等,另外,STL库属于C++标准库的一部分,两者是包含关系。</p> <p style="font-size: 15px;text-indent:2em;letter-spacing:1px; font-family: '微软雅黑';">由于我平时的编程环境主要在Linux系统下,所以在后面总结中,我会主以<font color="#ff0000">GNU ISO C++ Library中的STL源码(5.2.1版本)</font

C++应用程序性能优化(七)——内存池技术

冷暖自知 提交于 2020-12-12 13:45:31
C++应用程序性能优化(七)——内存池技术 一、内存池简介 1、C++内存池简介 内存池(Memory Pool)是一种内存分配方式,是在真正使用内存前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。 通用内存分配和释放的缺点如下: (1)使用malloc/new申请分配堆内存时系统需要根据最先匹配、最优匹配或其它算法在内存空闲块表中查找一块空闲内存;使用free/delete释放堆内存时,系统可能需要合并空闲内存块,因此会产生额外开销。 (2)频繁使用时会产生大量内存碎片,从而降低程序运行效率。 (3)造成内存泄漏。 内存池(Memory Pool)是代替直接调用malloc/free、new/delete进行内存管理的常用方法,当申请内存空间时,会从内存池中查找合适的内存块,而不是直接向操作系统申请。 内存池技术的优点如下: (1)堆内存碎片很少。 (2)内存申请/释放比malloc/new方式快。 (3)检查任何一个指针是否在内存池中。 (4)写一个堆转储(Heap-Dump)到硬盘。 (5)内存泄漏检测(memory-leak detection),当没有释放分配的内存时,内存池(Memory Pool)会抛出一个断言(assertion)。

“ STL”和“ C ++标准库”有什么区别?

左心房为你撑大大i 提交于 2020-02-28 03:31:24
有人引起了我的注意, 这篇文章 声称 (我的意思是) STL术语被误用于指代整个C ++标准库,而不是指从SGI STL中获得的部分。 (...)它指的是“ STL”,尽管实际上仍然很少有人使用STL(它是SGI设计的)。 C ++标准库的某些部分是基于STL的,因此很多人(包括数位作者和臭名昭著的cplusplus.com)仍然将这些部分称为“ STL”。 但是,这是不准确的。 实际上,C ++标准从不提及“ STL”,并且两者之间存在内容差异。 (...)很少使用“ STL”来指代stdlib中恰好基于SGI STL的位。 人们认为这是整个标准库。 它被放在简历上。 这是一种误导。 我几乎不了解C ++的历史,因此我无法判断本文的正确性。 我应该避免使用术语STL吗? 还是这是一个孤立的意见? #1楼 从 GNU标准C ++库(libstdc ++)常见问题解答 : STL(标准模板库)是C ++标准库大块代码的灵感来源,但这些术语不可互换,并且含义不相同。 C ++标准库包含许多不是来自STL的东西,其中一些甚至都不是模板,例如 std::locale 和 std::thread 。 Libstdc ++-v3包含了 SGI STL 的许多代码(最终合并来自 3.3版 )。 与原始SGI代码相比,libstdc ++中的代码包含许多修复和更改。 特别地, string