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

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

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

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

讓C++代碼更加高效的幾個小技巧

Q4MP_gh_c472c21 ? 來源:程序喵大人 ? 作者:程序喵大人 ? 2021-09-23 15:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天和大家介紹一下能讓C++代碼更加高效的幾個小技巧,話不多說,以下為本文目錄:

參數(shù)傳遞方式:值傳遞還是引用傳遞

函數(shù)返回方式:按值返回還是按引用返回

使用移動語義

避免創(chuàng)建臨時對象

了解返回值優(yōu)化

考慮預(yù)分配內(nèi)存

考慮內(nèi)聯(lián)

迭代 vs 遞歸

選擇高效的算法

利用緩存

profiling

other碎碎念

以下為正文:

值傳遞還是引用傳遞:

一般情況下使用const的引用參數(shù)。對于函數(shù)本身會拷貝的參數(shù),最好使用值傳遞,但只有當(dāng)參數(shù)的類型支持移動語義時才這樣。

在某些情況下,值傳遞并移動實際上是向函數(shù)傳遞參數(shù)的最佳方式(注意看后面的tips),例如:

class A { public: A(const std::string &str) { str_ = str; }

private: std::string str_;};

可以考慮改為這種形式:

class A { public: A(std::string str) { str_ = std::move(str); }

private: std::string str_;};

因為無論如何都會對它們進行拷貝。

tips:看有些資料說后者值傳遞是更好的參數(shù)傳遞方式,貌似有些道理,但是我沒找到非常合理的理由,有知道的讀者可以在評論區(qū)留言。

按值返回還是按引用返回:

可以通過從函數(shù)中按引用方式返回對象,以避免對象發(fā)生不必要的復(fù)制。但有時不可能通過引用返回對象,例如編寫重載的operator+和其他類似運算符時。

永遠(yuǎn)都不要返回指向局部對象的引用或指針,局部對象會在函數(shù)退出時被銷毀。

但是,按值返回對象通常沒啥大問題。因為一般情況下他們會觸發(fā)返回值優(yōu)化或移動語義,即不會有多余的拷貝動作。

使用移動語義:

盡量確保對象擁有移動構(gòu)造函數(shù)和移動賦值運算符。對象有了移動語義后,許多操作都會更加高效,特別是與標(biāo)準(zhǔn)庫和算法相結(jié)合時。

避免創(chuàng)建臨時對象:

沒有必要的臨時對象能避免就避免。一般來說,應(yīng)該避免迫使編譯器構(gòu)造臨時對象的情況。盡管有時這是不可避免的,但是至少應(yīng)該意識到這項“特性”的存在,這樣才不會為實際性能和分析結(jié)果而感到驚訝。編譯器還會使用移動語義使臨時對象的效率更高。這是要在類中添加移動語義的另一個原因。

《More Effective C++》第19條款中介紹過:所謂的臨時對象并不是程序員創(chuàng)建的用于存儲臨時值的對象,而是指編譯器層面上的臨時對象:這種臨時對象不是由程序員創(chuàng)建,而是由編譯器為了實現(xiàn)某些功能(例如函數(shù)返回,類型轉(zhuǎn)換等)而創(chuàng)建。

比如下面的代碼就會有臨時對象的產(chǎn)生:

void Func(const std::string& s);char arr[]=“hello”;Func(aar); // here

返回值優(yōu)化

通過值返回對象的函數(shù)可能導(dǎo)致創(chuàng)建一個臨時對象。看下面的代碼:

Person createPerson(){ Person newP { “Marc”, “Gregoire”, 42 }; return newP;}

假如像這樣調(diào)用這個函數(shù)(假設(shè)Person 類已經(jīng)實現(xiàn)了operator《《運算符):

cout 《《 createPerson();

即便這個調(diào)用沒有將createPerson()的結(jié)果保存在任何地方,也必須將結(jié)果保存在某個地方,才能傳遞給operator《《。為此編譯器創(chuàng)建一個臨時變量,來保存createPerson()返回的Person 對象。

即使這個函數(shù)的結(jié)果沒有在任何地方使用,編譯器也仍然可能會生成創(chuàng)建臨時對象的代碼:

createPerson();

編譯器可能生成代碼來創(chuàng)建一個臨時對象來保存返回值,即使這個返回值沒有使用也是如此。

不過吧,編譯器會在大多數(shù)情況下優(yōu)化掉臨時變量,以避免復(fù)制和移動。

關(guān)于返回值優(yōu)化我之前有篇文章介紹過,感興趣的可以看看這個:《左值引用、右值引用、移動語義、完美轉(zhuǎn)發(fā),你知道的不知道的都在這里》

預(yù)分配內(nèi)存:

比如標(biāo)準(zhǔn)化容器中的reserve,需要頻繁創(chuàng)建內(nèi)存的地方可以考慮預(yù)分配一塊內(nèi)存出來,避免頻繁的創(chuàng)建內(nèi)存。

內(nèi)聯(lián)函數(shù):

短函數(shù)可以使用內(nèi)聯(lián)消除函數(shù)開銷。

迭代 vs 遞歸:

這里我更傾向于選擇迭代方式,而不是遞歸。遞歸占用大量棧內(nèi)存,且可能會產(chǎn)生很多不必要的臨時對象構(gòu)建。

選擇效率更高的算法:

學(xué)計算機的估計沒有不知道算法的吧,學(xué)算法估計沒有人不知道如何計算時間復(fù)雜度和空間復(fù)雜度吧,在平時開發(fā)過程中遇到算法問題時我們可盡量選擇效率更高的算法,比如O(N)和O(N2)的算法,我們肯定要選擇O(N)的呀,這里可以了解下C++的,這里引入了很多高效的算法供我們使用。

盡可能多的使用緩存:

將某些數(shù)據(jù)保存下來供下次使用,避免再次獲取或重新計算它們。如果任務(wù)或計算特別慢,應(yīng)該保證不執(zhí)行那些沒有必要的任務(wù)或者重復(fù)計算。

網(wǎng)絡(luò)通信:如果頻繁發(fā)起相同的網(wǎng)絡(luò)請求,可考慮將第一次的網(wǎng)絡(luò)請求結(jié)果保存在內(nèi)存中,或文件中?

磁盤訪問:如果頻繁訪問一個文件,可考慮將這個文件的內(nèi)容保存在內(nèi)存中。

數(shù)學(xué)計算:某些很耗時很復(fù)雜的運算,可考慮只執(zhí)行這種計算一次,然后共享結(jié)果。

對象分配:如果需要大量頻繁創(chuàng)建和銷毀短期對象,可考慮使用對象池。

線程創(chuàng)建:如果需要大量頻繁創(chuàng)建和銷毀線程,可考慮使用線程池。

做客戶端開發(fā)的朋友應(yīng)該都聽說多級緩存的概念,就是這個原理。

profiling:

那到底什么樣的代碼才算是高質(zhì)量代碼呢?

對此我整理了一份腦圖:

fd689c40-0fc9-11ec-8fb8-12bb97331649.png

如何能夠提升代碼質(zhì)量呢,除了我們自身過硬的編碼能力,還需要制定代碼檢查流程,一般代碼檢查有以下幾種方式:

fda83e86-0fc9-11ec-8fb8-12bb97331649.png

代碼檢查要檢查的問題有:

fdb5be76-0fc9-11ec-8fb8-12bb97331649.png

腦圖中有一些代碼度量指標(biāo),它用于量化代碼質(zhì)量:

如果代碼的圈復(fù)雜度或認(rèn)知復(fù)雜度過大,可能函數(shù)本身實現(xiàn)的過于復(fù)雜,或可能因為架構(gòu)設(shè)計過于復(fù)雜,導(dǎo)致函數(shù)過于復(fù)雜。

如果函數(shù)嵌套過深,說明函數(shù)很可能出錯,需要仔細(xì)進???評審,并且函數(shù)可能需要重構(gòu)。

如果模塊的扇入過大,說明模塊可能是公共模塊,需要??評審接?是否是穩(wěn)定的,或模塊承擔(dān)過多職責(zé),可以考慮遵循單?職責(zé),分解模塊的職責(zé)。

如果模塊的扇出過大,說明該模塊依賴多個模塊,可以考慮把被依賴的多個模塊合并為?個模塊,重構(gòu)依賴的接?。

如果類的繼承樹過深,考慮在繼承樹的深度上是否有新的變化?向,考慮提出新的策略類,或其他設(shè)計模式來優(yōu)化繼承樹。

如果子類過多,檢查?類的實現(xiàn)中共同的地?,先考慮提出公共的中間?類,檢查是否可以通過橋接模式、裝飾模式、組合模式等結(jié)構(gòu)型模式重構(gòu)代碼。

上面腦圖所說的需要檢查的各種問題中,代碼和需求背離問題與代碼是否符合設(shè)計問題需要人工評審,成本較高,其它問題可以通過工具來檢測。

檢測工具主要分為靜態(tài)代碼分析工具和動態(tài)代碼檢測工具。

靜態(tài)代碼分析工具主要用于靜態(tài)代碼分析,關(guān)于靜態(tài)代碼分析,它能夠根據(jù)規(guī)則幫助檢查代碼缺陷,然而,對于檢查規(guī)則能夠覆蓋的代碼,工具能夠工作的挺好,但對于規(guī)則沒有覆蓋的代碼,它卻無能為力,而且可能存在誤報問題。

靜態(tài)代碼分析是保證代碼質(zhì)量的重要手段,據(jù)說軟件開發(fā)中大概30%-70%的代碼邏輯設(shè)計和編碼缺陷都可以通過靜態(tài)代碼分析來發(fā)現(xiàn)和修復(fù)。它會掃描程序代碼,找出代碼中隱藏的錯誤,如參數(shù)不匹配、有歧義的嵌套語句、錯誤的遞歸、非法計算、空指針問題、越界問題、未初始化問題、內(nèi)存泄漏問題等。

靜態(tài)代碼分析工具的優(yōu)勢有:

自動執(zhí)行靜態(tài)代碼分析,快速定位代碼隱藏錯誤和缺陷

幫助代碼設(shè)計人員更專注于分析和解決代碼設(shè)計缺陷

減少在代碼人工檢查上花費的時間,提高軟件可靠性并節(jié)省開發(fā)成本

舉例如下:

代碼規(guī)范檢查:由于拷貝粘貼造成兩個分支的代碼完全相同

void func(int in, int &out) { if (in 》 1) out++; else out++; out++;}

代碼缺陷檢查:沒有用的RAII

void func() { std::lock_guard《std::mutex》(lk); // 臨時對象,語句結(jié)束后執(zhí)行析構(gòu),誤用的加鎖 。..}

下面是一些常見的靜態(tài)代碼分析工具:

fdc5b54c-0fc9-11ec-8fb8-12bb97331649.png

這里推薦一個常用的代碼質(zhì)量管理平臺SonarCube,SonarQube是一個管理代碼質(zhì)量的平臺(社區(qū)版免費),用于管理代碼的質(zhì)量,它會從多個角度維護檢測代碼質(zhì)量,通過插件形式支持多種語言的代碼質(zhì)量管理和檢測。它可以安裝sonar-cxx插件,內(nèi)置了一系列C/C++代碼檢查工具,還可以應(yīng)用在CI/CD流程中,和Jenkins打通,可以在提交代碼后檢查代碼是否有壞味道,不符合規(guī)范的代碼就拒絕被合入master。

還有一個很好用的靜態(tài)代碼檢測工具是Facebook的infer,它最大的優(yōu)勢是可以靜態(tài)檢測代碼內(nèi)隱藏的內(nèi)存泄漏問題,而且免費支持Android、C、OC語言

靜態(tài)代碼分析工具可以在運行前幫助我們檢測缺陷,只有30%-70%,但不是所有缺陷,很多缺陷需要在運行時才會被發(fā)現(xiàn)。

其實我們還可以使用一些動態(tài)分析工具,通過動態(tài)分析工具可以準(zhǔn)確定位問題,而且誤報率低,但這與測試用例強綁定,查找缺陷的比例與測試用例的覆蓋率有關(guān),覆蓋率對于衡量代碼質(zhì)量有很大意義。

代碼覆蓋率的意義:

● 幫助我們找到未覆蓋部分的代碼,分析測試用例設(shè)計的是否充分,之后視情況決定是否可以補充測試用例。

● 檢測出代碼的壞味道,提示我們修改代碼,理清代碼邏輯關(guān)系,提升代碼質(zhì)量。

● 代碼覆蓋率高不能代表代碼質(zhì)量一定好,但代碼覆蓋率低,代碼質(zhì)量估計不會高到哪去,可以作為我們衡量代碼質(zhì)量的重要手段之一。

● 對于沒有覆蓋到的錯誤,動態(tài)分析工具也無能為力。在實際工作中,我們可以動靜結(jié)合,多種檢查手段全都用上,可以更有效的提升代碼質(zhì)量。

動態(tài)分析工具可以在程序運行時發(fā)現(xiàn)代碼的缺陷,例如內(nèi)存問題、數(shù)據(jù)競爭、未定義行為等。

常用工具有GCC&Clang的Santizer系列:

● Asan-Address Sanitizer:緩存區(qū)溢出,內(nèi)存泄漏

● Tsan-Thread Sanitizer:并發(fā)問題

● Msan-Memory Sanitizer:未初始化內(nèi)存

● Ubsan-Undefined Behavior Sanitizer:未定義行為

● 編譯選項添加fsanitize=address/memory/thread/undefined

還有Valgrind工具:

● memchek:內(nèi)存問題,包括Asan和Msan

● helgrind:線程和并發(fā)問題

● cachegrind、callgrind、massif:幫助進行性能優(yōu)化

使用各種工具與單元測試、功能測試、系統(tǒng)測試結(jié)合,提高覆蓋率,可以幫助我們發(fā)現(xiàn)更多缺陷。

前面的多數(shù)都是代碼分析工具,下面介紹一些性能分析工具,關(guān)于性能分析工具Brendan Gregg大佬的網(wǎng)站介紹的很詳細(xì),這里貼出來一張他總結(jié)的工具圖:

這張圖從Linux內(nèi)核的各個子系統(tǒng)出發(fā),匯總了對各個子系統(tǒng)進行性能分析時可以選擇的工具。其實還有一些好用的工具,圖里沒有提到,這里重點介紹一下:

gprof:gprof是GNU工具之一,編譯的時候,它在每個函數(shù)的出入口加入了profiling的代碼,運行時統(tǒng)計程序在用戶態(tài)的執(zhí)行信息,可以得到每個函數(shù)的調(diào)用次數(shù),執(zhí)行時間,調(diào)用關(guān)系等信息,簡單易懂。適合于查找用戶級程序的性能瓶頸,然而對于很多耗時在內(nèi)核態(tài)執(zhí)行的程序,gprof不適合。

Oprofile:Oprofile也是一個開源的profiling工具,它使用硬件調(diào)試寄存器來統(tǒng)計信息,進行profiling的開銷比較小,而且可以對內(nèi)核進行profiling。它統(tǒng)計的信息非常多,可以得到cache的缺失率,memory的訪存信息,分支預(yù)測錯誤率等等,這些信息gprof得不到,但是對于函數(shù)調(diào)用次數(shù),它無能為力。

簡單來說,gprof簡單,適合于查找用戶級程序的瓶頸,而Oprofile稍微有點復(fù)雜,但是得到的信息更多,更適合調(diào)試系統(tǒng)軟件。

gperftools:Google出品,值得信賴,提供整個程序的熱點分布圖,找到性能瓶頸,然后可以針對性的進行性能優(yōu)化,如圖:

那使用什么API效率更高呢,可以看下圖:

fdf84f66-0fc9-11ec-8fb8-12bb97331649.png

圖中的rdtsc使用較繁瑣而且不適用于所有平臺和編譯器,剩下的大家可以按需使用哈。

關(guān)于性能分析工具,程序喵整理了一份非常詳細(xì)的腦圖(精華全在腦圖里),以性能指標(biāo)分類,不同指標(biāo)使用什么工具進行分析,都在圖里,目錄如下:

other碎碎念:

選擇合適的數(shù)據(jù)結(jié)構(gòu):

選擇合適的STL,想清楚什么時候用棧,什么時候用隊列,什么時候用數(shù)組,什么時候用鏈表。

某些if-else可改為switch,效率可能更高(知道為什么嗎,不知道的可以留言,人多的話考慮輸出一篇文章)。

優(yōu)先考慮棧內(nèi)存,而不是堆內(nèi)存(免得頻繁的申請釋放內(nèi)存)。

如何函數(shù)不需要返回值,就不要設(shè)置返回值。

使用位操作,移位代替乘法除法操作。

構(gòu)造函數(shù)時使用初始化方式,而不是賦值。

A::A() : a_(a) {} // better

A::A() { a_ = a;}

明確使用模板帶來的益處:

如果使用模板并沒有給你的開發(fā)帶來任何益處,是不是可以考慮不使用它,因為調(diào)試起來真的麻煩。

函數(shù)參數(shù)的個數(shù)不要太多。

擅用emplace,有些情況下會省去一次構(gòu)造的開銷。

最后想說一句:

先完成再完美。不要一開始就想著寫最完美的代碼,很多bug都是過早過度優(yōu)化導(dǎo)致的。一般情況下,性能較高的代碼可讀性都不是特別高。提早優(yōu)化很可能引發(fā)很多bug。很多情況下,我們可以先完成代碼,確保功能完成且正確之后,再去考慮完善。完成代碼后,可以使用profiling工具,找到瓶頸所在,然后做相應(yīng)優(yōu)化。另外產(chǎn)品和測試如果沒給你提性能需求,那優(yōu)化它干嘛!

責(zé)任編輯:haq

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

    關(guān)注

    22

    文章

    2124

    瀏覽量

    77110
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73960

原文標(biāo)題:看完這12條,寫出高效代碼

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    keil實現(xiàn)cc++混合編程

    C/C++的Misc Controls 中添加 --cpp11 參數(shù) 在工程選項中 Target中去掉勾選 Use MicroLIB 由于我的項目中大部分為C代碼,出現(xiàn)了以下問題。
    發(fā)表于 01-26 08:58

    C語言與C++的區(qū)別及聯(lián)系

    C語言和C++到底是什么關(guān)系? 首先C++C語言本來就是兩種不同的編程語言,但C++確實是對C
    發(fā)表于 12-24 07:23

    CC++之間的聯(lián)系

    且不需要高級特性的場景,而C++則在提供高效性能的同時,還能借助面向?qū)ο蠛头盒途幊痰忍匦蕴岣哕浖目删S護性和可擴展性
    發(fā)表于 12-11 06:51

    C語言和C++之間的區(qū)別是什么

    C++的標(biāo)準(zhǔn)庫那樣集成度高和功能齊全。 6、編譯器與語言特性: C++編譯器通常比C語言編譯器更加復(fù)雜,因為它需要處理更多的語言特性,比如模板元編程、命名空間、引用等。
    發(fā)表于 12-11 06:23

    C/C++條件編譯

    條件編譯是一種在編譯時根據(jù)條件選擇性地包含或排除部分代碼的處理方法。在 C/C++ 中,條件編譯使用預(yù)處理指令 #ifdef、#endif、#else 和 #elif 來實現(xiàn)。常用的條件編譯指令有
    發(fā)表于 12-05 06:21

    C++程序異常的處理機制

    運行代碼進行分離,使得程序更加模塊化;另一方面,C++的異常處理可以不需要異常處理在異常發(fā)生時的同一個函數(shù),而是可以在更上層合適的位置進行處理。 下面,我們一起來看看C++的異常處理
    發(fā)表于 12-02 07:12

    嵌入式C/C++回歸測試四大最佳實踐(附自動化測試工具TESSY使用教程)

    嵌入式開發(fā)中,一次微小的代碼改動都可能引發(fā)“蝴蝶效應(yīng)”,如何守護系統(tǒng)的穩(wěn)健?推薦專業(yè)的自動化測試工具#TESSY,源自戴姆勒-奔馳,是嵌入式C/C++單元/集成測試的標(biāo)桿。
    的頭像 發(fā)表于 10-31 14:21 ?405次閱讀
    嵌入式<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>回歸測試四大最佳實踐(附自動化測試工具TESSY使用教程)

    C/C++代碼靜態(tài)測試工具Perforce QAC 2025.3的新特性

    ?Perforce Validate?中?QAC?項目的相對/根路徑的支持。C++?分析也得到了增強,增加了用于檢測 C++?并發(fā)問題的新檢查,并改進了實體名稱和實
    的頭像 發(fā)表于 10-13 18:11 ?571次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>代碼</b>靜態(tài)測試工具Perforce QAC 2025.3的新特性

    技能+1!如何在樹莓派上使用C++控制GPIO?

    在使用樹莓派時,你會發(fā)現(xiàn)Python和Scratch是許多任務(wù)(包括GPIO編程)中最常用的編程語言。但你知道嗎,你也可以使用C++進行GPIO編程,而且這樣做還有不少好處。借助WiringPi
    的頭像 發(fā)表于 08-06 15:33 ?4151次閱讀
    技能+1!如何在樹莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    Perforce QAC產(chǎn)品簡介:面向C/C++的靜態(tài)代碼分析工具(已通過SO 26262認(rèn)證)

    Perforce QAC專為C/C++開發(fā)者打造,支持多種編碼規(guī)范、功能安全標(biāo)準(zhǔn)(ISO 26262)等,廣泛用于汽車、醫(yī)療、嵌入式開發(fā)領(lǐng)域,可幫助快速識別關(guān)鍵缺陷、提升代碼質(zhì)量、實現(xiàn)合規(guī)交付。
    的頭像 發(fā)表于 07-10 15:57 ?1265次閱讀
    Perforce QAC產(chǎn)品簡介:面向<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>的靜態(tài)<b class='flag-5'>代碼</b>分析工具(已通過SO 26262認(rèn)證)

    適用于SystemC/C++驗證的形式化解決方案

    雖然 SystemC/C++ 編程風(fēng)格已使用多年,但最近出現(xiàn)了一些特定使用模式,它們推動工程團隊采用共同的設(shè)計流程。這包括抽象算法設(shè)計代碼用作高層次綜合 (HLS) 工具的輸入,虛擬平臺模型用于早期軟件測試,可配置的知識產(chǎn)權(quán) (IP) 模塊,等等。
    的頭像 發(fā)表于 06-24 11:07 ?1264次閱讀
    適用于SystemC/<b class='flag-5'>C++</b>驗證的形式化解決方案

    在OpenVINO? C++代碼中啟用 AddressSanitizer 時的內(nèi)存泄漏怎么解決?

    在 OpenVINO? C++代碼中啟用 AddressSanitizer 時遇到內(nèi)存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    發(fā)表于 06-23 07:16

    主流的 MCU 開發(fā)語言為什么是 C 而不是 C++

    在單片機的地界兒里,C語言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說內(nèi)存這道坎兒。您當(dāng)stm32f4的256kRAM
    的頭像 發(fā)表于 05-21 10:33 ?1040次閱讀
    主流的 MCU 開發(fā)語言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    C++學(xué)到什么程度可以找工作?

    C++學(xué)到什么程度可以找工作?要使用C++找到工作,特別是作為軟件開發(fā)人員或相關(guān)職位,通常需要掌握以下幾個方面: 1. **語言基礎(chǔ)**:你需要對C++的核心概念有扎實的理解,包括但不
    發(fā)表于 03-13 10:19

    創(chuàng)建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結(jié)果與Python代碼不同是為什么?

    創(chuàng)建了用于OpenVINO?推理的自定義 C++ 和 Python* 代碼。 在兩個推理過程中使用相同的圖像和模型。 從 C++ 代碼中獲得的結(jié)果與 Python*
    發(fā)表于 03-06 06:22