環境資訊中心綜合外電;姜唯 編譯;林大利 審校
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能
※台北網頁設計公司這麼多該如何選擇?
※智慧手機時代的來臨,RWD網頁設計為架站首選
※評比南投搬家公司費用收費行情懶人包大公開
※回頭車貨運收費標準
環境資訊中心綜合外電;姜唯 編譯;林大利 審校
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能
※台北網頁設計公司這麼多該如何選擇?
※智慧手機時代的來臨,RWD網頁設計為架站首選
※評比南投搬家公司費用收費行情懶人包大公開
※回頭車貨運收費標準
以前總說手動擋車型省油,但現在不少自動變速箱與發動機的匹配愈發爐火純青,油耗也持續往下走,有些自動擋車型的油耗數據完全不輸手動擋。曾經我認為四缸是一台車的底線,沒想到現在三缸機已經越來越普遍。最經典的就是寶馬1系,連一向對發動機輸出有苛刻要求的寶馬都推出了1。
隨着我國經濟的飛速發展,不少人民的錢包變得越來越鼓。近幾年,我國汽車的人均汽車保有量在迅速攀升,銷量已經連續幾年位居世界第一。各國的廠商已經越來越重視中國市場,甚至有不少車型都是為中國市場量身定做的。
這十幾年中國汽車市場的變化還是挺大的,但這些變化我個人認為並不能說都是好事,只能說是一種對現實的妥協,下面就來和大家談談那些變化。
在08年左右的時候,自然吸氣發動機的車還是大行其道,那時候對排放沒有捉得這麼嚴,所以各路廠家都喜歡推出自吸車。我自己家裡也有一輛1.6L老世嘉,一腳油門下去時,加速力雖然不是很猛,但循序漸進的感覺確實美妙。
到了現在2018年,自吸車雖然不至於說退出歷史舞台,但是佔比已經愈來愈低,渦輪車的普及程度越來越高。早些年的時候,渦輪還是比較容易壞的。不過經過這麼多年的發展,渦輪的耐用性得以大幅提升。
連一向崇尚自吸的日系車都大力推渦輪,就知道這個趨勢已經不可逆轉。不過日系車的渦輪車普遍體驗還是不錯的,像1.5T的思域、2.0T的漢蘭達都給消費者帶來了良好的駕乘質感。自吸這條路,目前也只有日產和馬自達等寥寥無幾的車企在苦苦支撐。
在過去的時候,雖然也有自動擋,但普及程度沒有現在這麼高。現在感覺10台車裡面有9台都是自動擋的,而大多數人估計拿了駕駛證以後就沒有再開過手動擋,也有不少女生是直接考了個C2駕照。
自動擋車型的門檻越來越低,這對於廣大消費者來講絕對是一件好事,畢竟不是所有人都喜歡開車這件事。以前總說手動擋車型省油,但現在不少自動變速箱與發動機的匹配愈發爐火純青,油耗也持續往下走,有些自動擋車型的油耗數據完全不輸手動擋。
曾經我認為四缸是一台車的底線,沒想到現在三缸機已經越來越普遍。最經典的就是寶馬1系,連一向對發動機輸出有苛刻要求的寶馬都推出了1.5T三缸發動機來搶佔更多的市場份額。
雖然現在的三缸機在抖動控制方面已經做得相當不錯,在車內如果不是仔細體會,還真不容易感覺出來。不過也有一些汽修人員指出,三缸機在老化以後,抖動要比四缸機明顯不少,這也是不少人擔心的地方。
儘管如此,隨着汽車技術的不斷髮展,三缸機的技術也會得到進一步優化。就像別克的英朗、閱朗和GL6已經全面三缸化,未來相信會有越來越多的車型加入其中。
在各種政策的大力鼓勵下,各種電動車企業像雨後春筍般湧現出來,不少品牌連我們都不大認識。毫無疑問電動車會是下一片紅海,很多企業都想從中分一杯羹。不過就目前來看,自願買電動車的人還是少數。
一直以來困擾電動車發展的兩大難題是充電速度和續航里程,前者的話,蔚來已經提出了換電服務,這算是頗為便捷的一個解決方式;後者的話,經過這幾年的發展,不少電動車的理論續航里程都能達到450km以上,未來我相信能持續增多。
我曾經駕駛過特斯拉,無可否認,那種一點就有的加速確實不錯。但沒有了引擎和排氣的聲音,感覺整個駕駛參与度不夠高,就像關了聲音看恐怖片般索然無味。這也不是無法彌補,現在有不少汽車都有聲浪彌補功能,可根據駕駛員踩踏油門的深度來模擬出引擎和排氣的聲音,但假的真不了。
總結
這幾個汽車的變化,到底是好還是壞,不同的人有不同的看法。這些轉變就像青春期的愛情變為工作后的愛情,前者是單純懵懂的,後者則是現實清晰的。更為關鍵的是,汽車和愛情都是不可逆轉的,而我們唯一能做的就是珍惜和享受眼前的汽車生活。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※帶您來了解什麼是 USB CONNECTOR ?
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!
※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※教你寫出一流的銷售文案?
68-68。38萬1、3、5、7系,大家肯定都知道,那4系是什麼鬼。基本上來說,把它“當”成3系的雙門版本准沒錯。這一代寶馬4系其實與3系關聯性非常大,應該說除了外形上的差異,動力系統與机械結構基本一致的。這時候肯定有人會說,“貴這麼多還要少兩扇門這是玩我呢。
基本上每個男生或者喜愛汽車的女性朋友都有着一個跑車夢,開着敞篷跑車在海邊公路上馳騁,或者傍晚獨自在山路享受日落的時間。但現實總是殘酷的,年輕的時候可能礙於經濟實力的原因,基本沒可能會選擇跑車,到了成家立業以後,手頭是寬裕了,可是為了家人買一台敞篷跑車似乎也不是太適合,當然如果是自己的第二第三台車的話就無所謂。那有沒有能作為第一台車,既能滿足家用,也有着想到高的顏值和動感的駕駛體驗呢?答案是有,而且還有4部給閣下選擇。
梅賽德斯-奔馳(進口)- C級
指導價:41.68萬-48.98萬
每次提起奔馳,用優雅這個形容詞最為合適,好像就是它與生俱來的氣質融入到每一款車中,而加上Coupe這個詞之後,這份優雅更能發揮到極致。性感的外形總能給路人留下深刻的印象,經過徹底的革新之後,完全不同於三廂版C級。如果閣下看到這樣一台陌生的屁股,絕對就是Coupe。
C級Coupe不管是300還是200,對應的都是個性化雙門轎跑風格的中型車市場,它們都擁有凌厲而運動的外觀設計,毫不保留的展現出自己的個性,時刻讓你記住一句話,你開的可是奔馳。
英菲尼迪(進口)- Q60
指導價38.98-40.98萬
也許是品牌關係,大家一說到英菲尼迪第一時間想到的就是Q50,然後,就沒有然後了。那現在大家不妨認識一下Q50的Coupe版,Q60,一台詮釋了什麼叫“曲線美”雙門轎跑。各種流暢似水的線條勾勒出絕美的車身輪廓,一副攻擊性十足的前臉相信能瞬間俘獲閣下的心,不說了,先去擦一下口水。
外觀融合了Q50 EauRouge和概念車Q80 Inspiration的設計新元素,使車頭更有衝擊力。內飾相比動感的外觀則溫柔很多,甚至略帶平淡。動力方面目前在售的版本均匹配2.0T發動機搭配7速手自一體變速箱,整體動態跟Q50L相似。
寶馬(進口)- 4系
指導價:41.68-68.38萬
1、3、5、7系,大家肯定都知道,那4系是什麼鬼?基本上來說,把它“當”成3系的雙門版本准沒錯。這一代寶馬4系其實與3系關聯性非常大,應該說除了外形上的差異,動力系統與机械結構基本一致的。這時候肯定有人會說,“貴這麼多還要少兩扇門這是玩我呢?”,這個問題一開始也是這麼想的,直到開上去的那瞬間,那操控手感,那底盤素質。值,非常值。
總結起來4系的特點就是:外觀比3系更寬更低,視覺效果也更震撼,內飾就是一台“寶馬”,沒有驚喜,沒有意外。要說4系最吸引的,還是跟3系的外觀差異,以及紮實的底盤功底。
雷克薩斯-RC
指導價:48.80-58.60萬
雷克薩斯這車在今天講的4部車裡算是比較特別的存在,很多人以為它是IS的雙門版本,但實際上RC可以完全看作單獨專門開發的跑車,而不是衍生車型。
日本紳士最厲害是什麼?當然就是那個固執起來又挺能跟上潮流的性格,RC霸氣的外觀設計會很容易讓人誤以為它有着強大的性能,事實上它對舒適性的妥協較多,很舒服的座椅,很舒服的車內氛圍,在高速上會開到困也不奇怪。性能也是今天講的4部車裡最不“跑車”的,但如果閣下就喜歡跑車造型設計和超級舒適的內在,那麼RC也許就是最適合閣下的那台愛車
結尾
50萬可以買一部思域然後改得“飛天遁地”,也可以買坐上去就舒服到馬上睡着的行政車,但能在外形和內部豪華感上達到平衡且高水準的,目前還是比較少見的。雖然4部都是2.0T汽油發動機,跟“性能”都相去甚遠,但日常在道路找找激情撒撒野還是沒任何問題的。如果閣下是“絕對顏控”,Q60肯定是第一選擇;如果說雙門跑車一定要德國車的話,C級Coupe和4系都不會讓閣下失望,甚至能有點小興奮;至於RC,它除了能給閣下“我很快”的感覺之外,雷克薩斯的匠人品質以及豪華感還能讓圍觀的路人都覺得“你好棒”。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能
※台北網頁設計公司這麼多該如何選擇?
※智慧手機時代的來臨,RWD網頁設計為架站首選
※評比南投搬家公司費用收費行情懶人包大公開
※回頭車貨運收費標準
sjlj (setjump/longjump)與dwarf-2為mingw32兩種異常處理模型的實現。sjlj有着開銷,而隨linux發行的mingw32開發庫包都是用sjlj版編譯的,而Qt卻採用dwarf-2版,那麼兩者之間有多少差異,本文就這問題對兩版的異常代碼的反彙編進行分析比較。
我使用mingw-w65-i686-810的sjlj與dwarf-2兩個版本對下面異常代碼編譯。
__attribute__((dllimport)) int dllfunc(); int main() { dllfunc(); //_create_locale(LC_ALL, "C"); printf("abc"); //return 0; try { try { throw std::exception(); } catch(std::exception&) { std::rethrow_exception(std::current_exception()); } } catch(int) { } catch(std::exception& e) { std::cout << e.what() << std::endl; } catch(...) { std::cout << "unknown" << std::endl; } return 0; }
代碼邏輯:
兩層 try/catch,
1. 裡層 try/catch
1.1 try塊, throw 異常
1.2 catch塊, rethrow
2. 外層 try/catch
2.1 有三catch分支。
開刷前,先定義一下。
如果將 try/catch 去除 c++語言特性后,基本就是一種由c++庫還有c++編譯器共同管理的 goto。
throw相當於goto, catch相當於label(一種以類型區分的)。
那麼c++編譯器與c++庫為我們提供了什麼樣的管理呢?
c++編譯器
0. 利用c++支持對象析構進行try塊保護。
1. 將 throw 關鍵字生成彙編 call __cxa_throw,調用 c++庫的函數。
2. 為每個catch塊生成代碼片斷,只能通過jmp跳轉進來。
2.1 開頭 call __cxa_begin_catch。
2.2 結尾 call __cxa_end_catch。
2.3 最後跳出到 try/catch塊邏輯代碼的下條執行指令。
3. 為同一try/catch塊的所有catch塊產生分支控制代碼。
4. 為try塊的析構代碼產生跳轉入口。
5. 為每一層try/catch塊生成 uncaught 代碼塊,調用 _Unwind_Resume。
c++庫:
1. __cxa_throw,馬上_Unwind_RaiseException。跳轉到當前最裏面一層 try/catch的支路控制代碼片斷。
2. _Unwind_Resume,向上繼續展開。
3. std::rethrow_exception,調用 __gcclibcxx_demangle_callback,
3.1 要麼有 catch可達跳回到原來代碼的控制流,直接離開std::rethrow_exception的調用上下文。
3.2 要麼從__gcclibcxx_demangle_callback返回,執行terminate結束進程。
sjlj 版的反彙編代碼比 dwarf-2 版的多了50行。
先來看dwarf-2的反彙編代碼
1 <+0>: lea 0x4(%esp),%ecx 2 <+4>: and $0xfffffff0,%esp 3 <+7>: pushl -0x4(%ecx) 4 <+10>: push %ebp 5 <+11>: mov %esp,%ebp 6 <+13>: push %esi 7 <+14>: push %ebx 8 <+15>: push %ecx 9 <+16>: sub $0x2c,%esp 10 <+19>: call 0x401890 <__main> 11 <+24>: mov 0x4071a4,%eax 12 <+29>: call *%eax 13 <+31>: movl $0x404045,(%esp) 14 <+38>: call 0x4027c4 <printf> 15 <+43>: movl $0x4,(%esp) 16 <+50>: call 0x4017ac <__cxa_allocate_exception> 17 <+55>: mov %eax,%ebx 18 <+57>: mov %ebx,%ecx 19 <+59>: call 0x402890 <std::exception::exception()> 20 <+64>: movl $0x4017d4,0x8(%esp) 21 <+72>: movl $0x4042a8,0x4(%esp) 22 <+80>: mov %ebx,(%esp) 23 <+83>: call 0x401794 <__cxa_throw> 24 <+88>: mov $0x0,%eax 25 <+93>: jmp 0x401723 <main()+355> 26 <+98>: mov %edx,%ecx 27 <+100>: cmp $0x2,%ecx 28 <+103>: je 0x40162b <main()+107> 29 <+105>: jmp 0x401663 <main()+163> 30 <+107>: mov %eax,(%esp) 31 <+110>: call 0x4017a4 <__cxa_begin_catch> 32 <+115>: mov %eax,-0x1c(%ebp) 33 <+118>: lea -0x28(%ebp),%eax 34 <+121>: mov %eax,(%esp) 35 <+124>: call 0x4017cc <_ZSt17current_exceptionv> 36 <+129>: lea -0x28(%ebp),%eax 37 <+132>: mov %eax,(%esp) 38 <+135>: call 0x4017c4 <_ZSt17rethrow_exceptionNSt15__exception_ptr13exception_ptrE> 39 <+140>: mov %eax,%esi 40 <+142>: mov %edx,%ebx 41 <+144>: lea -0x28(%ebp),%eax 42 <+147>: mov %eax,%ecx 43 <+149>: call 0x4017ec <_ZNSt15__exception_ptr13exception_ptrD1Ev> 44 <+154>: call 0x40179c <__cxa_end_catch> 45 <+159>: mov %esi,%eax 46 <+161>: mov %ebx,%edx 47 <+163>: cmp $0x1,%edx 48 <+166>: je 0x40166f <main()+175> 49 <+168>: cmp $0x2,%edx 50 <+171>: je 0x401683 <main()+195> 51 <+173>: jmp 0x4016ca <main()+266> 52 <+175>: mov %eax,(%esp) 53 <+178>: call 0x4017a4 <__cxa_begin_catch> 54 <+183>: mov (%eax),%eax 55 <+185>: mov %eax,-0x24(%ebp) 56 <+188>: call 0x40179c <__cxa_end_catch> 57 <+193>: jmp 0x401618 <main()+88> 58 <+195>: mov %eax,(%esp) 59 <+198>: call 0x4017a4 <__cxa_begin_catch> 60 <+203>: mov %eax,-0x20(%ebp) 61 <+206>: mov -0x20(%ebp),%eax 62 <+209>: mov (%eax),%eax 63 <+211>: add $0x8,%eax 64 <+214>: mov (%eax),%eax 65 <+216>: mov -0x20(%ebp),%edx 66 <+219>: mov %edx,%ecx 67 <+221>: call *%eax 68 <+223>: mov %eax,0x4(%esp) 69 <+227>: movl $0x6ff07a00,(%esp) 70 <+234>: call 0x4017b4 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc> 71 <+239>: movl $0x4017bc,(%esp) 72 <+246>: mov %eax,%ecx 73 <+248>: call 0x4017f4 <_ZNSolsEPFRSoS_E> 74 <+253>: sub $0x4,%esp 75 <+256>: call 0x40179c <__cxa_end_catch> 76 <+261>: jmp 0x401618 <main()+88> 77 <+266>: mov %eax,(%esp) 78 <+269>: call 0x4017a4 <__cxa_begin_catch> 79 <+274>: movl $0x404049,0x4(%esp) 80 <+282>: movl $0x6ff07a00,(%esp) 81 <+289>: call 0x4017b4 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc> 82 <+294>: movl $0x4017bc,(%esp) 83 <+301>: mov %eax,%ecx 84 <+303>: call 0x4017f4 <_ZNSolsEPFRSoS_E> 85 <+308>: sub $0x4,%esp 86 <+311>: call 0x40179c <__cxa_end_catch> 87 <+316>: jmp 0x401618 <main()+88> 88 <+321>: mov %eax,%ebx 89 <+323>: call 0x40179c <__cxa_end_catch> 90 <+328>: mov %ebx,%eax 91 <+330>: mov %eax,(%esp) 92 <+333>: call 0x402770 <_Unwind_Resume> 93 <+338>: mov %eax,%ebx 94 <+340>: call 0x40179c <__cxa_end_catch> 95 <+345>: mov %ebx,%eax 96 <+347>: mov %eax,(%esp) 97 <+350>: call 0x402770 <_Unwind_Resume> 98 <+355>: lea -0xc(%ebp),%esp 99 <+358>: pop %ecx 100 <+359>: pop %ebx 101 <+360>: pop %esi 102 <+361>: pop %ebp 103 <+362>: lea -0x4(%ecx),%esp 104 <+365>: ret
我們的主要代碼邏輯只有20-30條指令
當 throw時,__cxa_throw函數是不會返回的, 如同goto最後是跳轉到他處,若被本層catch處理完才會跳轉回來<+88>。
然後看c++編譯器為我們生成的異常代碼 。
對於沒有發生異常時,代碼執行路徑基本不會去涉及到異常代碼支路,開銷幾近為0,只是代碼量增大。
下面來看 sjlj 版的彙編代碼,
1 function main(): 2 <+0>: lea 0x4(%esp),%ecx 3 <+4>: and $0xfffffff0,%esp 4 <+7>: pushl -0x4(%ecx) 5 <+10>: push %ebp 6 <+11>: mov %esp,%ebp 7 <+13>: push %edi 8 <+14>: push %esi 9 <+15>: push %ebx 10 <+16>: push %ecx 11 <+17>: sub $0x68,%esp 12 <+20>: movl $0x4017ac,-0x44(%ebp) 13 <+27>: movl $0x402958,-0x40(%ebp) 14 <+34>: lea -0x3c(%ebp),%eax 15 <+37>: lea -0x18(%ebp),%ebx 16 <+40>: mov %ebx,(%eax) 17 <+42>: mov $0x4015b4,%edx 18 <+47>: mov %edx,0x4(%eax) 19 <+50>: mov %esp,0x8(%eax) 20 <+53>: lea -0x5c(%ebp),%eax 21 <+56>: mov %eax,(%esp) 22 <+59>: call 0x402790 <_Unwind_SjLj_Register> 23 <+64>: call 0x4018b0 <__main> 24 <+69>: mov 0x406194,%eax 25 <+74>: movl $0xffffffff,-0x58(%ebp) 26 <+81>: call *%eax 27 <+83>: movl $0x404001,(%esp) 28 <+90>: call 0x4027e4 <printf> 29 <+95>: movl $0x4,(%esp) 30 <+102>: call 0x4017cc <__cxa_allocate_exception> 31 <+107>: mov %eax,-0x60(%ebp) 32 <+110>: mov %eax,%ecx 33 <+112>: call 0x4028b0 <std::exception::exception()> 34 <+117>: movl $0x4017f4,0x8(%esp) 35 <+125>: movl $0x404264,0x4(%esp) 36 <+133>: mov -0x60(%ebp),%eax 37 <+136>: mov %eax,(%esp) 38 <+139>: movl $0x1,-0x58(%ebp) 39 <+146>: call 0x4017b4 <__cxa_throw> 40 <+151>: mov $0x0,%eax 41 <+156>: mov %eax,-0x60(%ebp) 42 <+159>: jmp 0x401733 <main()+547> 43 <+164>: lea 0x18(%ebp),%ebp 44 <+167>: mov -0x54(%ebp),%edx 45 <+170>: mov -0x50(%ebp),%ecx 46 <+173>: mov -0x58(%ebp),%eax 47 <+176>: test %eax,%eax 48 <+178>: je 0x4015e6 <main()+214> 49 <+180>: sub $0x1,%eax 50 <+183>: test %eax,%eax 51 <+185>: je 0x40161b <main()+267> 52 <+187>: sub $0x1,%eax 53 <+190>: test %eax,%eax 54 <+192>: je 0x4016f8 <main()+488> 55 <+198>: sub $0x1,%eax 56 <+201>: test %eax,%eax 57 <+203>: je 0x401712 <main()+514> 58 <+209>: sub $0x1,%eax 59 <+212>: ud2 60 <+214>: mov %edx,%eax 61 <+216>: mov %ecx,%edx 62 <+218>: mov %edx,%ecx 63 <+220>: cmp $0x2,%ecx 64 <+223>: je 0x4015f3 <main()+227> 65 <+225>: jmp 0x401642 <main()+306> 66 <+227>: mov %eax,(%esp) 67 <+230>: call 0x4017c4 <__cxa_begin_catch> 68 <+235>: mov %eax,-0x1c(%ebp) 69 <+238>: lea -0x28(%ebp),%eax 70 <+241>: mov %eax,(%esp) 71 <+244>: call 0x4017ec <_ZSt17current_exceptionv> 72 <+249>: lea -0x28(%ebp),%eax 73 <+252>: mov %eax,(%esp) 74 <+255>: movl $0x2,-0x58(%ebp) 75 <+262>: call 0x4017e4 <_ZSt17rethrow_exceptionNSt15__exception_ptr13exception_ptrE> 76 <+267>: mov %edx,-0x60(%ebp) 77 <+270>: mov %ecx,-0x64(%ebp) 78 <+273>: lea -0x28(%ebp),%eax 79 <+276>: mov %eax,%ecx 80 <+278>: call 0x40180c <_ZNSt15__exception_ptr13exception_ptrD1Ev> 81 <+283>: mov -0x60(%ebp),%eax 82 <+286>: mov %eax,-0x60(%ebp) 83 <+289>: mov -0x64(%ebp),%esi 84 <+292>: mov %esi,-0x64(%ebp) 85 <+295>: call 0x4017bc <__cxa_end_catch> 86 <+300>: mov -0x60(%ebp),%eax 87 <+303>: mov -0x64(%ebp),%edx 88 <+306>: cmp $0x1,%edx 89 <+309>: je 0x40164e <main()+318> 90 <+311>: cmp $0x2,%edx 91 <+314>: je 0x401665 <main()+341> 92 <+316>: jmp 0x4016b3 <main()+419> 93 <+318>: mov %eax,(%esp) 94 <+321>: call 0x4017c4 <__cxa_begin_catch> 95 <+326>: mov (%eax),%eax 96 <+328>: mov %eax,-0x20(%ebp) 97 <+331>: call 0x4017bc <__cxa_end_catch> 98 <+336>: jmp 0x4015a7 <main()+151> 99 <+341>: mov %eax,(%esp) 100 <+344>: call 0x4017c4 <__cxa_begin_catch> 101 <+349>: mov %eax,-0x24(%ebp) 102 <+352>: mov -0x24(%ebp),%eax 103 <+355>: mov (%eax),%eax 104 <+357>: add $0x8,%eax 105 <+360>: mov (%eax),%eax 106 <+362>: mov -0x24(%ebp),%edx 107 <+365>: mov %edx,%ecx 108 <+367>: call *%eax 109 <+369>: mov %eax,0x4(%esp) 110 <+373>: movl $0x6ff29a00,(%esp) 111 <+380>: movl $0x3,-0x58(%ebp) 112 <+387>: call 0x4017d4 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc> 113 <+392>: movl $0x4017dc,(%esp) 114 <+399>: mov %eax,%ecx 115 <+401>: call 0x401814 <_ZNSolsEPFRSoS_E> 116 <+406>: sub $0x4,%esp 117 <+409>: call 0x4017bc <__cxa_end_catch> 118 <+414>: jmp 0x4015a7 <main()+151> 119 <+419>: mov %eax,(%esp) 120 <+422>: call 0x4017c4 <__cxa_begin_catch> 121 <+427>: movl $0x404005,0x4(%esp) 122 <+435>: movl $0x6ff29a00,(%esp) 123 <+442>: movl $0x4,-0x58(%ebp) 124 <+449>: call 0x4017d4 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc> 125 <+454>: movl $0x4017dc,(%esp) 126 <+461>: mov %eax,%ecx 127 <+463>: call 0x401814 <_ZNSolsEPFRSoS_E> 128 <+468>: sub $0x4,%esp 129 <+471>: movl $0xffffffff,-0x58(%ebp) 130 <+478>: call 0x4017bc <__cxa_end_catch> 131 <+483>: jmp 0x4015a7 <main()+151> 132 <+488>: mov %edx,-0x60(%ebp) 133 <+491>: call 0x4017bc <__cxa_end_catch> 134 <+496>: mov -0x60(%ebp),%eax 135 <+499>: mov %eax,(%esp) 136 <+502>: movl $0xffffffff,-0x58(%ebp) 137 <+509>: call 0x402788 <_Unwind_SjLj_Resume> 138 <+514>: mov %edx,-0x60(%ebp) 139 <+517>: movl $0x0,-0x58(%ebp) 140 <+524>: call 0x4017bc <__cxa_end_catch> 141 <+529>: mov -0x60(%ebp),%eax 142 <+532>: mov %eax,(%esp) 143 <+535>: movl $0xffffffff,-0x58(%ebp) 144 <+542>: call 0x402788 <_Unwind_SjLj_Resume> 145 <+547>: lea -0x5c(%ebp),%eax 146 <+550>: mov %eax,(%esp) 147 <+553>: call 0x402780 <_Unwind_SjLj_Unregister> 148 <+558>: mov -0x60(%ebp),%eax 149 <+561>: lea -0x10(%ebp),%esp 150 <+564>: pop %ecx 151 <+565>: pop %ebx 152 <+566>: pop %esi 153 <+567>: pop %edi 154 <+568>: pop %ebp 155 <+569>: lea -0x4(%ecx),%esp 156 <+572>: ret
下面的分析只列出不同的地方
上圖的註釋有誤沒有勘誤過,lea是不訪問內存,通常代替add指令做加法,應該是6條指令要訪問內存。
支路控制代碼:
可以看出,支路選路控制指令多而且複雜,還有就是跳轉多。
最後是函數結束前。
可以看出在 sjlj 版本中,即使代碼不發生異常,函數在進入與離開時都要為登記維護付出一此成本,當涉及異常代碼時,支路選路控制更加複雜更多跳轉。這裡有一個成本比例,你的函數邏輯簡單,上面的開銷比重就越大,如果是頻繁調用的輕量函數就要考慮不用exception這樣的error handle。
還有就是當發生異常時,需要交給c++庫去管理,不同異常處理模型的實現,有着不同的開銷,本文並沒有涉及到。只是單純從c++庫以外的代碼進行分析,也足夠看出他們之間有着一定的差別。
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※帶您來了解什麼是 USB CONNECTOR ?
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!
※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※教你寫出一流的銷售文案?
今天研究了一下怎麼用java代碼發送郵件,用的是Apache的commons-email包。
據說這個包是對javamail進行了封裝,簡化了操作。 這裏講一下具體用法吧
需要進入到QQ郵箱或者是網易郵箱裏面去獲取。在郵箱的設置->賬戶裏面,開啟如下服務,就能得到一個授權碼,這個授權碼要好好保管。有了這兩個東西就能夠通過第三方客戶端發送郵件了。
我用的是1.4,也可以去maven倉庫網站(https://mvnrepository.com)上面找別的版本。
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version> </dependency>
我在網上找了幾個案例,如下。
1.發送簡單文本郵件。這是最簡單也是最常用的。
/** * @describe 發送內容為簡單文本的郵件 * @throws EmailException */ public static void sendSimpleTextEmail() throws EmailException { Email email = new SimpleEmail(); //設置主機名,QQ郵箱是"smtp.qq.com",網易郵箱是"smtp.163.com" email.setHostName("smtp.163.com"); // 用戶名和密碼為郵箱的賬號和授權碼(不需要進行base64編碼) email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma")); //設置SSL連接,這樣寫就對了 email.setSSLOnConnect(true); //設置來源,就是發送方的郵箱地址 email.setFrom("myemailaddress@163.com"); //設置主題,可以不設置 email.setSubject("java發送郵件"); //設置信息,就是內容,這個必須要有 email.setMsg("這是測試郵件 ... :-)"); //接收人郵箱地址 email.addTo("receiveeraddress@qq.com"); email.send(); }
2.發送包含附件的郵件(附件為本地資源),這裏用到了一個EmailAttachment對象,也就是附件的意思
/** * @describe 發送包含附件的郵件(附件為本地資源) * @throws EmailException */ public static void sendEmailsWithAttachments() throws EmailException { // 創建一個attachment(附件)對象 EmailAttachment attachment = new EmailAttachment(); //設置上傳附件的地址 attachment.setPath("C:\\Users\\Administrator\\Pictures\\Saved Pictures\\conti.png"); attachment.setDisposition(EmailAttachment.ATTACHMENT); //這個描述可以隨便寫 attachment.setDescription("Picture of conti"); //這個名稱要注意和文件格式一致,這將是接收人下載下來的文件名稱 attachment.setName("conti.png"); //因為要上傳附件,所以用MultiPartEmail()方法創建一個email對象,固定步驟都是一樣的 MultiPartEmail email = new MultiPartEmail(); email.setHostName("smtp.163.com"); email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma")); email.setSSLOnConnect(true); email.addTo("receiveemail@qq.com", "Conti Zhang"); email.setFrom("myemailaddress@163.com", "Me"); email.setSubject("圖片"); email.setMsg("這是發送給你的圖片"); //將附件添加到郵件 email.attach(attachment); email.send(); }
3.發送包含附近的郵件(附件為在線資源),這個與上傳本地附件稍有區別,注意一下就行
/** * @describe 發送包含附件的郵件(附件為在線資源) * @throws EmailException * @throws MalformedURLException */ public static void sendEmailsWithOnlineAttachments() throws EmailException, MalformedURLException { EmailAttachment attachment = new EmailAttachment(); //設置在線資源路徑,和上傳本地附件的唯一區別 attachment.setURL(new URL("http://www.apache.org/images/asf_logo_wide.gif")); attachment.setDisposition(EmailAttachment.ATTACHMENT); attachment.setDescription("Apache logo"); attachment.setName("Apache logo.gif"); MultiPartEmail email = new MultiPartEmail(); email.setHostName("smtp.163.com"); email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma")); email.setSSLOnConnect(true); email.addTo("receiveemail@qq.com", "Conti Zhang"); email.setFrom("myemailaddress@163.com", "Me"); email.setSubject("The logo"); email.setMsg("Here is Apache's logo"); email.attach(attachment); email.send(); }
4.發送內容為HTML格式的郵件,有些郵件直接打開就是一個HTML頁面。雖然不一定用到,可以了解一下
/** * @describe 發送內容為HTML格式的郵件 * @throws EmailException * @throws MalformedURLException */ public static void sendHTMLFormattedEmail() throws EmailException, MalformedURLException { // 這裏需要使用HtmlEmail創建一個email對象 HtmlEmail email = new HtmlEmail(); email.setHostName("smtp.163.com"); email.setAuthenticator(new DefaultAuthenticator("myemailaddresss@163.com", "myshouquanma")); email.addTo("receiveemail@qq.com", "Conti Zhang"); email.setFrom("myemailaddress@163.com", "Me"); email.setSubject("Test email with inline image"); // 嵌入圖像並獲取內容id,雖然案例這樣寫,但我感覺直接在html內容裏面寫圖片網絡地址也可以 URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif"); String cid = email.embed(url, "Apache logo"); // 設置html內容 email.setHtmlMsg("<html>The apache logo - <img src=\"cid:" + cid + "\"></html>"); // 設置替代內容,如果不支持html email.setTextMsg("你的郵件客戶端不支持html郵件"); email.send(); }
5.發送內容為HTML格式的郵件(嵌入圖片更方便)
這裏用到了DataSourceFileResolver對象,和DataSourceUrlResolver對象,前者可以解析本地文件路徑,後者可以解析網絡路徑
具體用法如下
/** * @describe 發送內容為HTML格式的郵件(嵌入圖片更方便) * @throws MalformedURLException * @throws EmailException */ public static void sendHTMLFormattedEmailWithEmbeddedImages() throws MalformedURLException, EmailException { //html郵件模板
String htmlEmailTemplate = "<img src=\"http://www.conti.com/images/1.jpg\">"; DataSourceResolver[] dataSourceResolvers =new DataSourceResolver[]{new DataSourceFileResolver(),new DataSourceUrlResolver(new URL("http://"))}; email.setDataSourceResolver(new DataSourceCompositeResolver(dataSourceResolvers)); email.setHostName("smtp.qq.com"); email.setAuthenticator(new DefaultAuthenticator("myemailaddress@qq.com", "myshouquanma")); email.addTo("receiveemail@qq.com", "Conti Zhang"); email.setFrom("myemailaddress@qq.com", "Me"); email.setSubject("Test email with inline image"); email.setHtmlMsg(htmlEmailTemplate); email.setTextMsg("你的郵件客戶端不支持html郵件"); email.send(); }
此種方式可能會報錯,會被郵箱認為是有害郵件不接收而導致發送失敗。解決方法就是,網易郵箱不行就換QQ郵箱,我就是這樣做的
好了,就這麼多,歡迎討論!
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能
※台北網頁設計公司這麼多該如何選擇?
※智慧手機時代的來臨,RWD網頁設計為架站首選
※評比南投搬家公司費用收費行情懶人包大公開
※回頭車貨運收費標準
據中國汽車工業協會最新發佈數據,今年前6個月我國新能源汽車產量達到7.6萬輛,這一產量同比增幅達到2.5倍。 然而,新能源整車產量快速增長的同時,配套動力電池的產量卻出現缺口。“現在動力電池基本上只要能造出來,銷售出去的問題不大。”乘用車市場資訊聯席會秘書長崔東樹向記者表示,這不僅大大制約了新能源汽車產能的釋放,同時也影響了動力電池技術的進步,“大家都忙著造,很難有人沉下心來做研發。” 實際上,據專家介紹,新能源汽車電池在生產上的技術門檻並不高,這直接導致的是動力電池產能處於快速擴張當中。然而,大批量技術含量較低電池企業的投產,則可能讓國內電池產能由短缺轉向過剩。業內人士預計,隨著產能的快速實現,電池產業可能將在2016年下半年迎來洗牌。
研發上與日韓有較大差距 “國內電池企業在自動化和研發能力上都與日韓企業有較大差距。”華霆動力技術有限公司的一位負責人向記者介紹,目前日韓企業在生產成本和技術上都整體領先於國內動力電池企業。 一位電池技術專家告訴記者,現階段國內動力電池企業的生產成本大約是2元每瓦時,按照容量為25千瓦時的動力電池計算,成本大約在5萬元左右。 這樣的成本明顯高於LG、三星等韓國動力電池生產企業。據介紹,韓企的成本已降至1.8元每瓦時以下,這意味著同樣是25千瓦時的動力電池,其成本將會低於4.5萬元。 不僅如此,國內電池企業的能量密度也低於日韓企業。上述電池技術專家介紹,國內較好的動力電池模組的能量密度在130瓦時每千克,而松下等日本企業生產動力電池模組的能量密度則能超過200瓦時每千克,LG、三星等韓國企業所生產動力電池也能達到180瓦時每千克左右。 這意味著,國內電池企業生產容量25千瓦時的電池重量將超過190千克,而同樣容量的電池,韓企生產出來的重量為140千克左右,部分日企則能達到125千克。這對於新能源整車的輕量化影響不小。 “目前,在動力電池領域,松下領先LG和三星12~18個月,而LG和三星則領先國內企業12~18個月。”國內某動力電池企業的負責人向記者坦言,“國內電池企業的自動化程度不高,研發和製造水準都趕不上。” 乘聯會資料顯示,國內新能源整車企業除比亞迪擁有自己的配套電池廠外,大多數都通過外採的方式解決電池問題。
明年底行業恐面臨洗牌 “現在國內電池企業的狀態普遍很浮躁。”上述電池企業負責人向記者表示,由於新能源車企對配套電池的需求持續旺盛,電池企業對產能投入的熱情已大於對研發和技術的追求。 隨著近年來新能源汽車產銷量高速增長,汽車電池產量的缺口也逐步展現出來。這激發了配套電池企業的投產熱情。 一位動力電池公司負責人向記者介紹,僅LG、三星、力神和CATL四家動力電池企業,明年將投產的產能就高達10吉瓦時以上,而每吉瓦時的電池產能可以滿足大約4萬輛新能源汽車的需要,也就是說,僅上述四家動力電池企業的產能就可以滿足40萬輛新能源車的裝配需要。“動力電池的技術門檻並不高。”一位充電設施企業的負責人告訴記者,目前動力電池的核心技術已相對成熟,因此企業實現投產並不難,這造成很多實力並不強大的電池企業紛紛上專案。 不過,“國內主流的12家新能源整車企業的採購,基本上都來自5家主要的動力電池廠家。”一位電池企業負責人向記者表示,隨著具備技術優勢的大電池企業產能的跟上,在技術和成本上都不具備優勢的小企業將很難生存,因此他預測“2016年底電池企業將面臨洗牌”。 乘聯會的資料顯示,目前電池企業CATL主要供應北汽、廣汽、長安和宇通等新能源車企;天津力神主要供應江淮、康迪、廣汽和宇通等;國軒高科則供應康迪、江淮、金龍、安凱和申沃等車企;萬向億能則供應上汽、奇瑞、廣汽、青年等車企。 文章來源:中財網
本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※帶您來了解什麼是 USB CONNECTOR ?
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!
※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※教你寫出一流的銷售文案?
今年第 1 季太陽能市況依然不佳,元晶在產能去瓶頸化,固定成本有效降低,營運仍維持獲利狀態,稅後淨利 3,643 萬元,每股純益 0.11 元。 元晶近年積極拓展高效產品市場,去年雖因美國雙反調查影響市場需求降溫,產品價格下滑,獲利縮水,不過,元晶去年仍有獲利,稅後淨利 1.7 億元,每股純益 0.56 元。 元晶目前太陽能電池年產能 720MW 規模,預計異質接面 (HiT) 高效太陽能電池技術達量產水準後,展開新一波擴產計畫,初步規劃 2017 年產能將倍增至 1,500MW 規模。
本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能
※台北網頁設計公司這麼多該如何選擇?
※智慧手機時代的來臨,RWD網頁設計為架站首選
※評比南投搬家公司費用收費行情懶人包大公開
※回頭車貨運收費標準
摘錄自2018年09月08日蘋果日報澳洲報導
澳洲動物保護生物學家泰勒(Martin Taylor)周五(7日)提出一份報告,指出新南威爾士省如果繼續目前的土地清理工作,至2050年左右,當地的無尾熊恐面臨滅絕。
《澳洲新聞網》報導,這份報告由澳洲世界自然基金會(WFF)與自然保護委員會(NCC)發布,分析新南威爾士省北部衛星圖像,評估土地清理工作對瀕危物種的影響。泰勒指出,如果清理速度沒有減緩,將會對當地野生動物造成嚴重後果。「我們看到無尾熊的棲地正以驚人的速度消失,每個人都在告訴我們,無尾熊的數量正在下降。如果速度不變,本世紀中葉,新南威爾士省將沒有野生無尾熊。」泰勒的研究發現,自2016年至今,完全或部分被清理的土地面積幾乎增加了2倍,從2845公頃增加到8194公頃。
然而新南威爾士省政府對這項警告提出反駁,當地環境廳長辦公室聲明指控,澳洲世界自然基金會(WFF)與自然保護委員會(NCC)正在散布恐慌。並強調「政府承諾會為無尾熊提供更多自然棲地,並改善道路殺手問題,也已投入4500萬澳幣的大量經費。」政府也強調「無尾熊的數量事實上高於預期。」
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※帶您來了解什麼是 USB CONNECTOR ?
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!
※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※教你寫出一流的銷售文案?
環境資訊中心綜合外電;姜唯 編譯;林大利 審校
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能
※台北網頁設計公司這麼多該如何選擇?
※智慧手機時代的來臨,RWD網頁設計為架站首選
※評比南投搬家公司費用收費行情懶人包大公開
※回頭車貨運收費標準
台灣知名電動機車品牌 Gogoro 將與日本著名機車品牌 YAMAHA 共同合作研發機車,此共同合作的車種將於 2019 年夏天發售,由台灣山葉機車發售,新車型將採用 Gogoro 的充換電結構與網路,Gogoro 這次與老牌機車廠合作無疑給其換電系統打了劑強心針,甚至有可能藉由 YAMAHA 之助在世界各地推動其系統,這個合作勢必也將對光陽(Kymco)與尚未選擇何種充換電系統的三陽(SYM)帶來更多壓力。
根據兩公司發出的資料顯示,該合作計畫的內容是有關電動機車的產品開發、委託製造以及電池交換系統的使用,雙方預計於今年內簽署正式合約。屆時將以 Gogoro 市面銷售的車款為基礎,進行 YAMAHA 品牌的電動機車設計,並委由 Gogoro 生產。所完成的車輛則交由台灣山葉機車的銷售通路進行銷售,預計 2019 年夏季將推出第一個車款。
同時,兩家公司的事業合作夥伴「住友商事株式會社」,在促成雙方合作上也扮演了重要的角色。
YAMAHA 自 1966 年起投入台灣機車市場,目前以台灣山葉機車所生產的機車為主,年間販賣 29 萬台(2017 年實績)。同時也製造、銷售電動機車 E-VINO,並輸出到日本。以開發機能來說,YAMAHA 在台灣設有 YAMAHA Motor R&D Taiwan,主要是負責台灣市場的速克達機車開發。此次和 Gogoro 的合作案,不只是想要在台灣市場擴充其包含燃油車種在內的產品種類,在電動車的部分,也想透過運用 Gogoro 所擁有的電池交換站網路,提高消費者使用上的便利性。
Gogoro 自 2015 年起投入台灣機車市場,以製造自有品牌的智慧雙輪和可方便交換電池的電池交換站,開展全新的電動機車商業模式。Gogoro 能源網路目前在台灣已設置超過 750 個電池交換站,預計 2019 年初將超過 1,000 站。並且,自產品上市以來,已達到 1,700 萬次以上的電池交換次數,透過此次的合作,Gogoro 可望擴大電動機車的產能。
YAMAHA 發動機株式會社 MC 事業本部長木下拓也表示:「此次和台灣 Gogoro 的合作,不只增加顧客對移動工具的選擇,同時透過共用先進的電池交換系統,將對新的移動工具服務和創造市場帶來挑戰。」
Gogoro 創辦人暨執行長陸學森表示:「Gogoro 為推動能源開放平台的創新品牌,並運用能源網路的建置來推進大型智慧城市的轉型。這次我們非常榮幸能與 YAMAHA 合作,向實現能源願景的目標邁出重要的一步。」
(合作媒體:。首圖來源:)
本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※帶您來了解什麼是 USB CONNECTOR ?
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!
※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※教你寫出一流的銷售文案?