当前位置:首页 » 操作系统 » stllinux

stllinux

发布时间: 2022-08-22 05:00:22

A. 编写linux内核程序使用C++时可以使用BOOST,STL类似的函数库么

当然可以,c++是跨平台的,,c++可以用boost,但是得在linux下边重新编译,而stl这个东西可以直接用的。你可以在linux下边找到stl的库函数的。boost编译完了,得把相应的so加到g++路径或者env变量路径里面。想学习了解更多linux知识,请关注《linux就该这么学》官网。

B. linux g++ 的stl是线程安全的么

STL的线程安全问题不能一概而论,从标准上说,STL从来没说过自己是线程安全的,同时为了性能,很多地方也无法实现线程安全(要完美实现线程安全必须产生大量的临界锁定,会大大影响性能),所以首先你应该认为stl不是线程安全的,并且尽量依靠自己来做线程同步安全机制。
但STL在一定程度上可以看做是线程安全
1:多线程读是安全的,多线程写是不安全的
2:不同容器的多线程读写是没问题的,同一个容器不能多线程写
3:返回迭代器的时候,迭代器的生命周期内一定要自己做安全同步

C. linux stl 头文件 安装哪个包

Linux上C++的STL头文件好像属于是GNU编译器带的头文件,应该是安装了GNU C/C++编译器就会有,我的系统上用yum安装了gcc-c++这个g++编译器的软件包后,然后就系统上就有C++的各种头文件了。GNU C++的的头文件目录一般是/usr/include/c++这个目录,你看看你的系统上有没有这个目录。

D. linux 下如何查看stl的源代码

STL是Standard Template Library的简称,也即标准模板库,是一个具有工业强度的,高效的C++程序库。有关使用库的好处自不必多说,这里大致的讲述一下STL的相关知识和如何在Linux下使用STL;

下面首先给出这几篇文章,都是介绍STL入门的极佳导学文章--

C++ STL轻松导学
STL简介
A modest STL tutorial

看了这篇文章之后,我想你一定对STL有了一个概括性质的了解,当然,如果你感觉自己了解的仍然不够充分,你可以去这里--

STL 中文站
最优秀的STL使用学习网站
C++ Standard Template Library Overview

获取更为详细的信息;其实网上有关STL的东西太多了,鱼龙混杂,但绝不乏精品,所以,如果你感觉看某一篇有关STL的文章实在是看不下去了,就应该考虑是不是这篇文章质量有问题,再去网上搜取合适的吧。

我想通览了以上有关STL的信息之后,我们可以得出这样一个结论,那就是在linux下,如果要使用STL库,可选的就是这两个:Boost和SGI;

下面我们分别来作一下比较:

这是C++ Boost 库的文档索引

这是C++ SGI 库的文档索引

经过比较,我们可以得出这样一个结论,Boost库的内容更为丰富一些;所以,如果你打算体验一下Linux下的基于STL的应用开发,可以准备从Boost的学习开始,而且Boost的网上文档也是非常丰富的,参与Boost的开发人员甚至达到了2000多人!

下面在Linux下编写一个基于STL的程序,测试一下;对了,现在我们也知道了Linux下默认支持的STL是SGI库,此库在Linux下性能非常不错!

这里先给出程序源代码:
#include <iostream>#include <vector>using namespace std;int main(int argc, char *argv[]){ vector<int> int_vector; vector<double> double_vector; int_vector.push_back(99); int_vector.push_back(9999); double_vector.push_back(99.99); double_vector.push_back(9999.9999); int size; size = int_vector.size(); for (int i = 0; i < size; i ++){ cout << int_vector[i] << endl; } size = double_vector.size(); for (int j = 0; j < size; j ++){ cout << double_vector[j] << endl; }}
注意其中的这一句“using namespace std;”,如果没有这一句,你会遇到很多莫名其妙的问题,导致你不知所措,没办法排除错误,而实际上解决问题的关键就是这么一句话!

E. linux stl容器可以提示吗

(1)序列式容器(Sequence containers),每个元素都有固定位置--取决于插入时机和地点,和元素值无关,vector、deque、list;
Vectors:将元素置于一个动态数组中加以管理,可以随机存取元素(用索引直接存取),数组尾部添加或移除元素非常快速。但是在中部或头部安插元素比较费时;
Deques:是“double-ended queue”的缩写,可以随机存取元素(用索引直接存取),数组头部和尾部添加或移除元素都非常快速。但是在中部或头部安插元素比较费时;
Lists:双向链表,不提供随机存取(按顺序走到需存取的元素,O(n)),在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针;
(2)关联式容器(Associated containers),元素位置取决于特定的排序准则,和插入顺序无关,set、multiset、map、multimap;
Sets/Multisets:内部的元素依据其值自动排序,Set内的相同数值的元素只能出现一次,Multisets内可包含多个数值相同的元素,内部由二叉树实现,便于查找;
Maps/Multimaps:Map的元素是成对的键值/实值,内部的元素依据其值自动排序,Map内的相同数值的元素只能出现一次,Multimaps内可包含多个数值相同的元素,内部由二叉树实现,便于查找;

F. 编写linux内核程序使用C++时 可以使用BOOST,STL类似的函数库么

当然可以,c++是跨平台的,,c++可以用boost ,但是得在linux 下边重新编译,而stl 这个东西可以直接用的。你可以在linux 下边找到stl 的库函数的。
boost 编译完了,得把相应的so 加到 g+ +路径或者env 变量路径里面。。

G. linux c++ stl的内存如何才会释放

首先回linxxx3童鞋的:
根据map的代码片段,可以看见重载下标运算符如下:
template<class Key,class T,class Compare=less<Key>,class Alloc = alloc>
{
....省略
T& operator[](const Key_type& k){
return (*((insert(value_type(k,T() ) ) ) .first)).second;
}
....省略
}
由以上代码可知.下标运算符中间接调用insert.
即使事先不存在的pair也会被新插入再取出value来.
童鞋,该补课了.

再回答楼主问题:
stl的内存实质上都是由allocator来负责管理的.
alloctor会管理一个内存池.按照标准而言.这个内存池会在stl实例被析构的时候将内存池销毁并还给系统调用库.
注意:是还给系统调用库.没有说还给系统了.
此时,这段被归还的内存是可以用于存放其它东西的.
只是他们还没有被还给系统.
如何"强迫他"还给系统呢?
这个问题要问这个系统库,一般而言.当有新的内存请求,而系统觉得内存太少的时候.他就问去检查下看有谁把内存还回来了.如果有,就把它们取回空闲内存区.
这就是为什么你随便new个什么内存立即 就回到系统的原因.
这个问题要深究可以去查阅linux内核编程相关的东西.

H. Linux下stl的map怎么释放内存

测试过程:insert采用malloc分配内存,释放时采用free释放内存,并erase操作子。使用top窗口查看程序使用的内存。测试结果:free后,操作系统为程序分配的内存并不会free掉,而被Hold了。当再次调用insert入map,会使用未free掉的内存。
如果后面insert同样采用malloc分配内存,操作系统会优先使用先去malloc且free掉的内存,若不够再malloc新内存。

I. STL多线程在linux环境下性能急剧下降,求解答

编译选项:g++ -std=c++11 -pthread
关键代码:void processHD::assignTask() { this->fileName = cowboy_util::getAllFiles(this->dataDir); this->totalFiles = fileName.size(); vector<std::thread> threads; //平均每个线程处理的文件数目 int filePerThread = fileName.size() / this->threadNum; filePerThread += fileName.size() % this->threadNum == 0 ? 0 : 1; for (int index = 0; index < this->threadNum - 1; index++) { std::thread t(&processHD::taskThread, this, index*filePerThread, index*filePerThread + filePerThread - 1, index + 1); t.detach(); } std::thread t(&processHD::taskThread, this, filePerThread*(this->threadNum - 1), this->fileName.size() - 1, this->threadNum); t.detach(); } void processHD::taskThread(int begin,int end,int index) { for (int i = begin; i <= end; i++) { string name = this->fileName[i]; calculate(name

热点内容
脚本韩信 发布:2025-07-08 01:30:59 浏览:949
lua脚本linux 发布:2025-07-08 01:20:57 浏览:220
平板如何关掉appstore密码 发布:2025-07-08 00:59:17 浏览:406
安卓版轩辕剑剑之源哪里下载 发布:2025-07-08 00:55:06 浏览:676
安卓的软件怎么关闭 发布:2025-07-08 00:53:38 浏览:778
html5整站源码 发布:2025-07-08 00:36:01 浏览:944
sql创建链接 发布:2025-07-08 00:08:38 浏览:398
ftp上传中断 发布:2025-07-08 00:08:37 浏览:642
linux云计算课程 发布:2025-07-08 00:07:23 浏览:23
安卓网易云怎么发布歌曲 发布:2025-07-07 23:42:29 浏览:626