国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

您的編譯器在查找編碼缺陷方面有多好

星星科技指導(dǎo)員 ? 來源:嵌入式計(jì)算設(shè)計(jì) ? 作者:WOJCIECH BASALAJ, PH. ? 2022-11-07 15:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

許多人認(rèn)為,如果源代碼編譯干凈,激活所有警告,那么它就可以進(jìn)入驗(yàn)證階段,例如測試或代碼審查。但是,假設(shè)如果代碼已干凈地編譯,那么存在的任何錯(cuò)誤一定是由對需求的解釋而不是它們的實(shí)現(xiàn)引起的,這是危險(xiǎn)的。Wojciech對這一假設(shè)進(jìn)行了實(shí)證評估,并證明與專用靜態(tài)分析和編碼標(biāo)準(zhǔn)執(zhí)行(CSE)工具生成的警告范圍相比,任何編譯器提供的警告范圍都非常有限。

一種普遍的觀點(diǎn)是,如果源代碼編譯干凈,所有警告都打開,那么它就可以進(jìn)行驗(yàn)證,例如測試或代碼審查。這種假設(shè)的危險(xiǎn)在于,如果代碼已經(jīng)編譯干凈,那么存在的任何錯(cuò)誤都必須在需求的解釋中,而不是在它們的實(shí)現(xiàn)中。然而,對這一假設(shè)的實(shí)證評估最終表明,與專用靜態(tài)分析和編碼標(biāo)準(zhǔn)執(zhí)行(CSE)工具生成的警告范圍相比,任何編譯器提供的警告范圍都受到嚴(yán)重限制。

本文的比較使用了GNU Common C++“2”版本1.6.3,這是一個(gè)大約42,000行代碼的真實(shí)代碼庫。由于這是一個(gè)跨平臺庫,因此它不支持任何特定的編譯器,并且可以用作任何編譯器可能期望處理的代表性示例。其適中的大小允許手動檢查所有編譯器警告的準(zhǔn)確性,同時(shí)確保其多樣性和數(shù)量不平凡。

檢查的四個(gè)編譯器是GCC,Visual C++,C++Builder和Intel C++ Compiler,以及靜態(tài)分析和CSE工具,表明如果開發(fā)人員過于依賴編譯器來識別編碼缺陷,他們可能會發(fā)現(xiàn)他們的代碼不可維護(hù),可重用或可移植。此外,Visual C++“團(tuán)隊(duì)版”使用“代碼分析”功能補(bǔ)充其標(biāo)準(zhǔn)編譯器警告,其輸出包含在這些結(jié)果中。

生成警告輸出

在實(shí)踐中,這四個(gè)編譯器中有一個(gè)遺漏的每一個(gè)缺陷都會對代碼庫的質(zhì)量產(chǎn)生影響,無論是可維護(hù)性、可移植性還是可重用性。這在部署代碼時(shí)是一個(gè)重大威脅,盡管大多數(shù)示例源代碼都通過了編譯器的架構(gòu)檢查參數(shù)。

由于這些編譯器基于不同的前端,因此每個(gè)編譯器可能會發(fā)出不同的警告。表 1 并排比較了每個(gè)編譯器和靜態(tài)分析工具生成的不同警告,用于我們比較中使用的代碼庫:GNU Common C++ “2”。使用編譯結(jié)果時(shí)可用的每個(gè)編譯器的最新版本,并啟用最大警告級別。(表 1 的標(biāo)題行指示使用的確切編譯器版本和選項(xiàng)。不是相對于這些編譯器進(jìn)行基準(zhǔn)測試,而是將它們的警告輸出與靜態(tài)分析器進(jìn)行比較以進(jìn)行C++。

表 1:默認(rèn)檢測比較 – 比較的基礎(chǔ)和每個(gè)百分比數(shù)字是編譯器和給定類別中的靜態(tài)分析工具報(bào)告的不同警告之間的比率。標(biāo)題行詳細(xì)說明了用于啟用最大警告級別的確切編譯器版本和選項(xiàng)。

21

如表中最后一行所示,CSE 工具生成了超過 400 個(gè)警告,而測試的編譯器甚至沒有一個(gè)設(shè)法返回 20 個(gè)警告。事實(shí)上,根據(jù)經(jīng)驗(yàn),靜態(tài)分析識別的警告是所有四個(gè)編譯器中最好的 25 倍 - 啟用了代碼分析的可視化C++(/analyze 選項(xiàng))。值得注意的是,如果未啟用此功能,Visual C++ 在所有測試的編譯器中生成的警告最少。

表 1 中的第一列數(shù)據(jù)顯示了靜態(tài)分析工具也檢測到的每個(gè)編譯器生成的警告的百分比。請注意,重疊程度很高,平均 84% 的編譯器警告由 CSE 工具復(fù)制。比較的這一面只是為了完整性,因?yàn)闊o論是否執(zhí)行靜態(tài)分析,開發(fā)人員都需要啟用編譯器警告。

表 1 的其余行顯示了比較的另一面:編譯器標(biāo)記了多少靜態(tài)可檢測的內(nèi)容?很明顯,編譯器警告避開了“C++的效率和使用”類別。這是意料之中的,因?yàn)榫幾g器優(yōu)化是在后端執(zhí)行的,通常是靜默的。但是,值得注意的是,專用的 CSE 工具在此類別中有一系列檢查,專注于低效設(shè)計(jì),與低級編譯器優(yōu)化不同,這些檢查無法自動糾正。

錯(cuò)過的常見警告

可移植性是編譯器庫中缺少的常見警告類別。只有 C++Builder 生成了一個(gè)可歸類為可移植性問題的警告,而靜態(tài)分析工具標(biāo)記了 17 個(gè)警告。這些表示符合 ISO C++ 語言定義的構(gòu)造,但可能會導(dǎo)致不同的編譯器實(shí)現(xiàn)出現(xiàn)問題。編譯器供應(yīng)商通過提供 ISO C++ 的擴(kuò)展來鎖定開發(fā)人員的情況并不少見,可移植性在他們的議程上并不重要也就不足為奇了。這代表了可移植性問題的另一個(gè)方面,即符合 ISO C++,這可以通過靜態(tài)分析工具中的單獨(dú)警告類別來解決。

對于大多數(shù)編譯器供應(yīng)商來說,ISO C++合規(guī)性歸結(jié)為接受盡可能多的有效C++代碼,同時(shí)回避檢測不一致代碼的問題 - 通常是他們自己的語言擴(kuò)展。檢測 ISO C++不合格是 CSE 工具的優(yōu)勢之一,這在表 1 中很明顯。很明顯,大多數(shù)編譯器警告可以歸類為(代碼)“設(shè)計(jì)問題”和“可維護(hù)性”,其中一些警告非常小,值得將它們降級為樣式問題。然而,即使對于這些重點(diǎn)領(lǐng)域,與靜態(tài)分析工具相比,其覆蓋率也遠(yuǎn)非全面,對于最佳競爭者 - 具有代碼分析功能的可視化C++,覆蓋率為7%。

編譯器傳統(tǒng)上避免的其他警告類別包括:命名約定、代碼布局、復(fù)雜性指標(biāo)閾值以及禁止某些關(guān)鍵字(例如 throw)和函數(shù)(例如 malloc),但 Visual C++ 代碼分析功能有一個(gè)明顯的例外,該功能具有硬連線警告,用于使用 _alloca、_snprintf 和 TerminateThread 函數(shù)。由于這不如靜態(tài)分析工具的可配置檢查(允許指定任何函數(shù))全面,因此獲得了半分,使該編譯器在本地(公司特定)標(biāo)準(zhǔn)執(zhí)行方面得分為 10%。實(shí)施上述區(qū)域的主要好處是增強(qiáng)了代碼的可重用性,從表 1 中可以明顯看出,編譯器實(shí)際上尚未利用這一點(diǎn)。

在比較每個(gè)工具生成的實(shí)際警告實(shí)例時(shí),將原始警告計(jì)數(shù)制成表格并不是特別有啟發(fā)性,因此常見的C++編碼標(biāo)準(zhǔn)將作為比較的客觀基礎(chǔ)。從表 2 可以看出,與 CSE 工具記錄的違規(guī)行為相比,沒有一個(gè)編譯器提供任何明顯的高完整性C++、JSF++ 或 MISRA C++ 強(qiáng)制實(shí)施。

表 2:編碼標(biāo)準(zhǔn)執(zhí)行 (CSE) 比較

22

全面性教育工具:最全面/可轉(zhuǎn)移的路線

一個(gè)常見的誤解是,編譯器警告是靜態(tài)分析源代碼的充分方法。與專用的靜態(tài)分析和 CSE 工具(如 PRQA 的 QA?C++)相比,市場領(lǐng)先的編譯器提供的警告范圍有限。此外,可用的少數(shù)檢查往往集中在代碼錯(cuò)誤行為和可維護(hù)性問題上,而可重用性和可移植性問題完全被忽視。專用的 CSE 工具提供了所有這些領(lǐng)域的全面實(shí)施,同時(shí)保持編譯器不可知性,因此代碼庫和開發(fā)環(huán)境不必局限于特定的編譯器和平臺。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73984
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51617
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    請問WWDT和IWDT保護(hù)系統(tǒng)方面有哪些不同?

    WWDT和IWDT保護(hù)系統(tǒng)方面有哪些不同?
    發(fā)表于 12-10 06:43

    單片機(jī)開發(fā)功能安全中編譯器

    的問題是,防御性編碼和外部數(shù)據(jù)訪問等實(shí)踐并不屬于編譯器認(rèn)可的領(lǐng)域。例如,C和C ++都沒有為內(nèi)存損壞留出任何余地,因此,除非在沒有這種損壞的情況下可以訪問旨在防止內(nèi)存損壞的代碼,否則在對代碼進(jìn)行優(yōu)化
    發(fā)表于 12-01 06:44

    性能突破 | SpacemiT-X60 LLVM 編譯器上實(shí)現(xiàn) 16% 顯著提升

    2025年10月,北美RISC-V峰會上,Igalia編譯器工程師Mikhail發(fā)表專題演講《Unlocking15%MorePerformance
    的頭像 發(fā)表于 11-21 18:04 ?8886次閱讀
    性能突破 | SpacemiT-X60 <b class='flag-5'>在</b> LLVM <b class='flag-5'>編譯器</b>上實(shí)現(xiàn) 16% 顯著提升

    開源鴻蒙技術(shù)大會2025丨編譯器與編程語言分論壇:語言驅(qū)動系統(tǒng)創(chuàng)新,編譯賦能生態(tài)繁榮

    萬物智聯(lián)的時(shí)代背景下,操作系統(tǒng)底層能力的構(gòu)建離不開編程語言與編譯器的關(guān)鍵支撐。作為開源鴻蒙生態(tài)的核心技術(shù),語言設(shè)計(jì)與編譯器、虛擬機(jī)實(shí)現(xiàn)的進(jìn)步直接關(guān)系到開發(fā)效率、運(yùn)行性能與系統(tǒng)安全。本次分論壇聚焦
    的頭像 發(fā)表于 11-20 17:24 ?925次閱讀
    開源鴻蒙技術(shù)大會2025丨<b class='flag-5'>編譯器</b>與編程語言分論壇:語言驅(qū)動系統(tǒng)創(chuàng)新,<b class='flag-5'>編譯</b>賦能生態(tài)繁榮

    如何在Keil中將NuMicro BSP從Arm編譯器5遷移到編譯器6?

    Keil中將NuMicro BSP從Arm編譯器5遷移到編譯器6!
    發(fā)表于 08-20 06:29

    Aurix Development Studio 中是否有允許 SCR 端添加調(diào)試編譯器選項(xiàng)的功能?

    ELF 文件中的調(diào)試信息,其中沒有調(diào)試符號,并且我無法調(diào)試 SCR 代碼。Aurix Development Studio 中是否有允許 SCR 端添加調(diào)試編譯器選項(xiàng)的功能?
    發(fā)表于 07-21 06:00

    邊緣設(shè)備AI部署:編譯器如何實(shí)現(xiàn)輕量化與高性能?

    、ASIC等)上高效執(zhí)行的機(jī)器代碼。AI編譯器AI模型的部署和優(yōu)化中扮演著關(guān)鍵角色,能夠顯著提升模型的運(yùn)行效率和性能。 ? AI編譯器的主要功能 ? AI編譯器的主要功能包括模型優(yōu)化
    的頭像 發(fā)表于 07-06 05:49 ?6645次閱讀

    編譯器功能安全驗(yàn)證的關(guān)鍵要素

    汽車、工業(yè)、醫(yī)療等安全關(guān)鍵型應(yīng)用中,確保功能安全合規(guī)性需要嚴(yán)格的工具鏈驗(yàn)證。開發(fā)安全關(guān)鍵型軟件的企業(yè)必須遵守ISO 26262、IEC 61508、ISO 62304等國際標(biāo)準(zhǔn)對編譯器工具鏈進(jìn)行全面的驗(yàn)證。
    的頭像 發(fā)表于 07-05 13:37 ?1579次閱讀

    兆松科技發(fā)布高性能RISC-V編譯器ZCC 4.0.0版本

    近日,兆松科技(武漢)有限公司(以下簡稱“兆松科技”)宣布正式發(fā)布高性能 RISC-V 編譯器 ZCC 4.0.0 版本。新版本性能優(yōu)化、廠商自定義指令支持和軟件庫等方面實(shí)現(xiàn)全面升級,并同步推出
    的頭像 發(fā)表于 06-27 14:48 ?3040次閱讀
    兆松科技發(fā)布高性能RISC-V<b class='flag-5'>編譯器</b>ZCC 4.0.0版本

    兆松科技ZCC編譯器全面支持芯來科技NA系列處理

    近日,兆松科技(武漢)有限公司(以下簡稱“兆松科技”)宣布正式發(fā)布高性能RISC-V編譯器ZCC 4.0.0版本。
    的頭像 發(fā)表于 06-11 09:56 ?1708次閱讀

    RISC-V架構(gòu)下的編譯器自動向量化

    高性能算力生態(tài)的建設(shè),正投入編譯器自動向量化優(yōu)化等多項(xiàng)關(guān)鍵技術(shù),全面助力RISC-V的高性能發(fā)展。RISC-V向量設(shè)計(jì)SpacemiT現(xiàn)代CPU中,向量支持是算力的
    的頭像 發(fā)表于 06-06 16:59 ?1235次閱讀
    RISC-V架構(gòu)下的<b class='flag-5'>編譯器</b>自動向量化

    RVCT編譯器是否比GNU的編譯器的代碼執(zhí)行速度更快?

    使用FX3S遇到了RVCT編譯器的問題。 1、SDK的release note中有支持RVCT的描述, 但是EZ USB Suite的設(shè)置中沒有找到RVCT的選項(xiàng), 請問支持的具體版本
    發(fā)表于 05-08 07:49

    HighTec編譯器全面適配紫光同芯THA6 Gen2系列產(chǎn)品

    近日,紫光同芯與全球領(lǐng)先的汽車級C/C++編譯器供應(yīng)商HighTec共同宣布,HighTec編譯器完成對紫光同芯THA6 Gen2系列產(chǎn)品的全面適配。此次合作實(shí)現(xiàn)了從指令集優(yōu)化到功能安全的全棧支持,是國產(chǎn)高端車規(guī)芯片與國際領(lǐng)先開發(fā)工具的深度技術(shù)融合,將為全球汽車電子開發(fā)者
    的頭像 發(fā)表于 04-02 09:42 ?1187次閱讀

    KiCad直播活動(三): Windows上編譯KiCad 手把手教編譯/構(gòu)建 KiCad 源碼

    親愛的 KiCad 粉們: 本周繼續(xù) KiCad 的直播活動,我們將在 3 月27 日周四晚 19:30 為帶來 “ Windows 上編譯 KiCad” 的專題!邀請了 KiCad Lead
    的頭像 發(fā)表于 03-24 11:14 ?1681次閱讀
    KiCad直播活動(三):<b class='flag-5'>在</b> Windows上<b class='flag-5'>編譯</b>KiCad 手把手教<b class='flag-5'>您</b><b class='flag-5'>編譯</b>/構(gòu)建 KiCad 源碼

    請問基于GCC編譯器的initcallSTM32如何實(shí)現(xiàn)?

    請問各位基于GCC編譯器的initcallSTM32如何實(shí)現(xiàn)?有哪位實(shí)現(xiàn)了嗎?
    發(fā)表于 03-13 06:24