linuxstl
1. 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內核編程相關的東西.
2. linux stl 頭文件 安裝哪個包
Linux上C++的STL頭文件好像屬於是GNU編譯器帶的頭文件,應該是安裝了GNU C/C++編譯器就會有,我的系統上用yum安裝了gcc-c++這個g++編譯器的軟體包後,然後就系統上就有C++的各種頭文件了。GNU C++的的頭文件目錄一般是/usr/include/c++這個目錄,你看看你的系統上有沒有這個目錄。
3. linux g++ 的stl是線程安全的么
STL的線程安全問題不能一概而論,從標准上說,STL從來沒說過自己是線程安全的,同時為了性能,很多地方也無法實現線程安全(要完美實現線程安全必須產生大量的臨界鎖定,會大大影響性能),所以首先你應該認為stl不是線程安全的,並且盡量依靠自己來做線程同步安全機制。
但STL在一定程度上可以看做是線程安全
1:多線程讀是安全的,多線程寫是不安全的
2:不同容器的多線程讀寫是沒問題的,同一個容器不能多線程寫
3:返回迭代器的時候,迭代器的生命周期內一定要自己做安全同步
4. linux下STL得string類實現源碼怎麼找
linux下不是所有的程序都有源代碼,能再具體描述你的問題嗎? 腳本類的軟體有源代碼,編譯類的,類似c語言的一般經過編譯連接,發布的不帶源代碼。
5. 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內可包含多個數值相同的元素,內部由二叉樹實現,便於查找;
6. 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下性能非常不錯! 這里先給出程序源代碼:
7. linux 下想實現stl的內存共享,有人有相關的可參考實例嗎
此種問題應該是linux中進程間的通信技術,你可以使用linux系統提供的API函數 mmap函數,映射一片指定大小的內存空間,護著使用共享隊列,另外不同的進程的同一個虛擬地址指向的實際內存空間是不同的;各自獨享單獨的進程空間;
可參考linux C一站式編程