當前位置:首頁 » 操作系統 » 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

熱點內容
網吧u盤拒絕訪問 發布:2025-05-16 14:13:50 瀏覽:259
無線網檢查網路配置是怎麼回事 發布:2025-05-16 14:04:03 瀏覽:220
網路爬蟲python代碼 發布:2025-05-16 14:03:26 瀏覽:516
汽車小組件怎麼弄到安卓桌面 發布:2025-05-16 13:51:12 瀏覽:220
linuxg編譯器下載 發布:2025-05-16 13:50:58 瀏覽:776
centosc編譯器 發布:2025-05-16 13:50:17 瀏覽:948
安卓手機如何變換桌面 發布:2025-05-16 13:39:33 瀏覽:515
sql存儲過程命令 發布:2025-05-16 13:17:54 瀏覽:146
用紙做解壓小玩具西瓜 發布:2025-05-16 13:04:09 瀏覽:936
區域網xp無法訪問win7 發布:2025-05-16 13:03:58 瀏覽:943