sharedptr的用法 shared_ptr的用法?
shared_ptr的用法?寫cpp,語法的痛苦點模板,等你模板報錯達到幾百行的時候,你就會明白勸退 1。第二個痛苦點,內(nèi)存操作,包括內(nèi)存越界,內(nèi)存泄露,內(nèi)存臟數(shù)據(jù),共享內(nèi)存,內(nèi)存池等所有相關(guān),遲早會
shared_ptr的用法?
寫cpp,語法的痛苦點模板,等你模板報錯達到幾百行的時候,你就會明白勸退 1。第二個痛苦點,內(nèi)存操作,包括內(nèi)存越界,內(nèi)存泄露,內(nèi)存臟數(shù)據(jù),共享內(nèi)存,內(nèi)存池等所有相關(guān),遲早會遇到程序崩潰,勸退 1。第三個痛點,鎖和多進程多線程還有協(xié)程,以及管道通信,消息機制。這些都是操作系統(tǒng)相關(guān)的知識,要搞明白不比學(xué)cpp簡單。勸退 1。第四個,既然用了cpp,那就遲早要用到so,dll,對應(yīng)的debug噩夢來了,服務(wù)器上用gdb調(diào)試帶so的多進程多線程程序的難度和復(fù)雜度,會讓人迷失。勸退 1。第五個,平臺,編譯器不同,優(yōu)化和不優(yōu)化導(dǎo)致程序運行結(jié)果不同,這個時候我都是無語問蒼天。第六個,宏噩夢,dll依賴噩夢,cpp編譯時間長噩夢,以及系統(tǒng)突然升級(安全漏洞修復(fù))導(dǎo)致某個庫不兼容的噩夢。沒經(jīng)歷過的人是體會不到的。
如果實現(xiàn)了一種不用暫停世界的GC算法,會對現(xiàn)在編程語言產(chǎn)生什么影響?
很高興回答你的問題。
首先,僅以個人較為熟悉的java jvm gc去回答這個問題
我們知道gc算法有很多種,同時,我們也知道,每一種gc算法在做full gc的時候都會STW,但是,每一種的gc算法都不會一味的追求極短的暫停,甚至樓主所說的無暫停。這在計算機中其實是一種平衡。
我們都知道計算機資源是有限的,任何一個指令的執(zhí)行都是需要消耗資源的,在越來越先進的技術(shù)面前,我相信而且也確定已經(jīng)有g(shù)c算法可以做到完全的并發(fā),但是為什么沒有成為大家通用的算法呢?這其中我認為就是資源的平衡。
gc算法的完全并發(fā)必然會造成cpu開銷加大,一定程度的暫停,其實是有助于程序吞吐量性能。而且目前優(yōu)秀的gc算法的暫停速度極快。在這種情況下,極短暫的暫停換來整體資源回收后的大幅吞吐量性能的提升,其實不見得不好。
當(dāng)然,gc算法的選擇極其重要。
因此,個人拙見,選擇合適的gc算法,遠比追求極端的不暫停更有意義。
謝謝。
c 中關(guān)于智能指針std::tr1::shared_ptr的用法?
智能指針本身絕對不能是動態(tài)分配的內(nèi)存,不然只能指針就沒有存在的意義了。
智能指針有個數(shù)據(jù)成員,是個指針,至于什么類型,看你類模板怎么實現(xiàn)。這個指針才是動態(tài)分配內(nèi)存的。只能本身必須是棧里分配內(nèi)存。利用棧的自動回收數(shù)據(jù)的特性,在被系統(tǒng)西東回收時,調(diào)用智能指針類的析構(gòu)函數(shù),從而釋放智能指針內(nèi)部那個指針型數(shù)據(jù)成員所指向的內(nèi)存。舉個例子 std::shared_ptr關(guān)于發(fā)生時異常時,shared_ptr智能指針會自動析構(gòu)的疑問?
看不到測試代碼。
原則上,發(fā)生異?;蚝瘮?shù)的返回路徑上,析構(gòu)函數(shù)的調(diào)用是由編譯器插代碼來保證的。不過一般不要在構(gòu)造和析構(gòu)函數(shù)里拋出異常。
C 的異常是庫和邏輯級別的,必須代碼throw;錯誤的內(nèi)存訪問、除零錯誤等不是C 異常(在曾經(jīng)的vs ide上,ms擴展了編譯器行為允許try/catch處理結(jié)構(gòu)化異常,注意看IDE設(shè)置選項)。這是不同于Java和C#的,他們是虛擬機平臺級別的,除代碼拋出外,發(fā)生異常時虛擬機也會拋出。
另外,在C 里異常是可選的,很多庫都提供了關(guān)閉或開啟的開關(guān)。而Java和C#是強制性的,屬于核心機制。