chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

5種方式初始化String成員怎樣選擇?

CPP開(kāi)發(fā)者 ? 來(lái)源:CPP開(kāi)發(fā)者 ? 作者:CPP開(kāi)發(fā)者 ? 2022-11-24 14:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C++初始化成員的方式有許多,尤其是隨著C++11值類(lèi)別的重新定義,各種方式之間的差異更是細(xì)微。

本文將以String成員初始化為例,探討以下5種方式之間的優(yōu)劣:
  • call by-const-reference

  • call by-value

  • two-overloads

  • std::string_view

  • forwarding references

輸入不同,它們的開(kāi)銷(xiāo)也完全不同,我們將以4種不同的輸入分別討論。本篇結(jié)束,下方的表格也將填滿(mǎn)。6c0b8b9c-6bab-11ed-8abf-dac502259ad0.png ?實(shí)際要討論的情況遠(yuǎn)超1種,因此這張表格在不同的情境下,填入的開(kāi)銷(xiāo)也不盡相同。多種情況,多個(gè)概念,交叉討論,錯(cuò)綜復(fù)雜,這也是本篇文章難度能入四星的原因。下面正式進(jìn)入討論。

1call by-const-reference

這種方式最是廣為流傳,C++11之前亦可使用,是早期的推薦方式。

比如:

structS{
std::stringmem;
S(conststd::string&s):mem{s}{}
};
即便現(xiàn)在,使用這種方式也是大有人在。

根據(jù)4種不同的輸入分析其開(kāi)銷(xiāo),代碼如下:

std::stringstr{"dummy"};
Ss1("dummy");//1.Implicitctor
Ss2(str);//2.lvalue
Ss3(std::move(str));//3.xvalue
Ss4(std::string{"dummy"});//4.prvalue
第一,Implicit ctor。當(dāng)傳入一個(gè)字符串字面量時(shí),會(huì)先通過(guò)隱式構(gòu)造創(chuàng)建一個(gè)臨時(shí)的string對(duì)象,將它綁定到形參之上,再通過(guò)拷貝構(gòu)造復(fù)制到成員變量。共2次分配。

第二,lvalue。對(duì)于左值,將直接綁定到形參上,再通過(guò)拷貝構(gòu)造復(fù)制到成員變量。共1次分配。

第三,xvalue。對(duì)于消亡值,操作同上。共1次分配。

第四,prvalue。對(duì)于純右值,操作同上。共1次分配。

由此可知,使用const-reference string時(shí),至少存在1次分配。對(duì)于左值來(lái)說(shuō),這本無(wú)可厚非;但對(duì)于右值來(lái)說(shuō),這將徒增一次沒(méi)必要的拷貝;對(duì)于字符串字面量,還會(huì)由隱式構(gòu)造創(chuàng)建一個(gè)臨時(shí)對(duì)象,增加一次開(kāi)銷(xiāo)。

因此,這種方式只有針對(duì)左值時(shí),效果才不錯(cuò),其他情況都會(huì)增加一次開(kāi)銷(xiāo)。

2call by-value

這是從C++11開(kāi)始也廣為流傳的一種方式,使用的人也不少。4種調(diào)用不變,實(shí)現(xiàn)變?yōu)榱耍?/span>
structS{
std::stringmem;
S(std::strings):mem{std::move(s)}{}
};
這種方式采用值傳遞參數(shù),在許多人的印象中,這種開(kāi)銷(xiāo)很大,實(shí)際情況到底如何呢?第一,Implicit ctor。同樣,先通過(guò)隱式構(gòu)造創(chuàng)建一個(gè)臨時(shí)對(duì)象,然后將其值偷取到成員變量。共1次分配+1次移動(dòng)。第二,lvalue??截悓?duì)象,然后將其值偷取到成員變量。共1次分配+1次移動(dòng)。第三,xvalue。值經(jīng)過(guò)兩次偷取到成員變量。共0次分配+2次移動(dòng)。第四,prvalue。值直接原地構(gòu)造,然后偷取到成員變量。共0次分配+1次移動(dòng)。可以看到,call by-const-reference的缺點(diǎn),這種方式全部避免。只在接受左值時(shí),多了一次移動(dòng)。因此,很多情況下,這種方式往往是一種更好的選擇,它可以避免無(wú)效的拷貝。

3Two-overloads

這種方式通過(guò)多提供一個(gè)移動(dòng)構(gòu)造來(lái)消除call by-const-reference的缺點(diǎn),由于存在兩個(gè)重載函數(shù),所以稱(chēng)為two-overloads。此時(shí)實(shí)現(xiàn)變?yōu)榱耍?/span>
structS{
std::stringmem;
S(conststd::string&s):mem{s}{}
S(std::string&&s):mem{std::move(s)}{}
};
相信你已經(jīng)猜到了現(xiàn)在的開(kāi)銷(xiāo)。第一,Implicit ctor。同樣,先創(chuàng)建一個(gè)臨時(shí)對(duì)象,然后調(diào)用移動(dòng)構(gòu)造。共1次分配+1次移動(dòng)。第二,lvalue。調(diào)用拷貝構(gòu)造。共1次分配。第三,xvalue。調(diào)用移動(dòng)構(gòu)造。共0次分配+2次移動(dòng)。第四,prvalue。調(diào)用移動(dòng)構(gòu)造。共0次分配+1次移動(dòng)。通過(guò)多增加一個(gè)重載函數(shù),得到了不少好處,因此這也是一種可行的方式,但多寫(xiě)一個(gè)重載函數(shù)總是頗顯瑣碎。

4C++17 string_view

C++17 std::string_view也是一種可行的方案,所謂是又輕又快。采用這種方式,實(shí)現(xiàn)變?yōu)椋?/span>
structS{
std::stringmem;
S(std::string_views):mem{s}{}
};
此時(shí)的開(kāi)銷(xiāo)情況如何?第一,Implicit ctor。除了mem創(chuàng)建,沒(méi)有多余開(kāi)銷(xiāo)。共1次分配。第二,lvalue。通過(guò)隱式轉(zhuǎn)換創(chuàng)建string_view,然后拷貝到成員變量。共1次分配。第三,xvalue。同上。共1次分配。第四,prvalue。同上。共1次分配。對(duì)于右值,這種方式也會(huì)產(chǎn)生沒(méi)必要的開(kāi)銷(xiāo)。最重要的是,std::string_view隱藏有許多潛在的危險(xiǎn),就像操作裸指針一樣,需要程序員來(lái)確保它的有效性。稍不留神,就有可能產(chǎn)生懸垂引用,指向一個(gè)已經(jīng)刪除的string對(duì)象。因此,若是對(duì)其沒(méi)有一定的研究,極有可能使用錯(cuò)誤的用法。

5Fowarding references

Forwarding references可以自動(dòng)匹配左值或是右值版本,也是一種不錯(cuò)的方式。

實(shí)現(xiàn)變?yōu)椋?/span>

structS{
std::stringmem;
template<classT>
S(T&&s):mem{std::forward(s)}{}
};
此時(shí)的開(kāi)銷(xiāo)又如何?第一,Implicit ctor。除了mem構(gòu)造,無(wú)額外開(kāi)銷(xiāo)。共1次分配。第二,lvalue。直接綁定到實(shí)例化的模板函數(shù)參數(shù)上,然后拷貝一份。共1次分配。第三,xvalue。調(diào)用移動(dòng)構(gòu)造。共0次分配+2次移動(dòng)。第四,prvalue。調(diào)用移動(dòng)構(gòu)造。共0次分配+1次移動(dòng)。這種方式借助了模板,參數(shù)的實(shí)際類(lèi)型根據(jù)TAD推導(dǎo),所以它的開(kāi)銷(xiāo)也都很小。很多時(shí)候,這種方式就是最佳選擇,它可以避免非必要的移動(dòng)或是拷貝,也適用于非String成員的初始化。但有些時(shí)候,你可能想明確指定參數(shù)類(lèi)型,此時(shí)這種方式就多有不便了。下節(jié)有相應(yīng)例子。

6曲未盡

分析至此,已然可以初步得出一張開(kāi)銷(xiāo)對(duì)比圖。

6c2b0968-6bab-11ed-8abf-dac502259ad0.png因此,若是要問(wèn)哪種方式初始化String成員比較好,如何回答?

看情況。

沒(méi)有哪種方式是完全占優(yōu)的,可以依據(jù)使用次數(shù)最多的操作計(jì)算消耗,從而正確決策。

舉個(gè)例子:

structS{
usingvalue_type=std::vector<std::string>;
usingassoc_type=std::map<std::string,value_type>;

voidpush_data(std::string_viewkey,value_typedata){
datasets.emplace(std::make_pair(key,std::move(data)));
}

assoc_typedatasets;
};
功能很簡(jiǎn)單,就是往一個(gè)map中添加數(shù)據(jù)。此時(shí),如何讓浪費(fèi)最?。?/span>

假設(shè)我們后面使用次數(shù)最多的操作為:

Ss;
s.push_data("key1",{"Dear","Friend"});
s.push_data("key2",{"Apple"});
s.push_data("key3",{"Jack","Tom","Jerry"});
s.push_data("key4",{"20","22","11","20"});
那么上述實(shí)現(xiàn)就是一種較好的方式。對(duì)于鍵,如果使用call by-const-reference,將會(huì)創(chuàng)建一個(gè)沒(méi)必要的臨時(shí)對(duì)象,而使用string_view可以避免此開(kāi)銷(xiāo)。對(duì)于值,實(shí)際上也使用隱式構(gòu)造創(chuàng)建了一個(gè)臨時(shí)vector對(duì)象,此時(shí)call by-value也是一種開(kāi)銷(xiāo)較小的方式。你可能覺(jué)得Forwarding reference也是一種不錯(cuò)的方式。
voidpush_data(auto&&key,auto&&data){
datasets.emplace(std::make_pair(
std::forward<decltype(key)>(key),
std::forward<decltype(data)>(data)
));
}
對(duì)于鍵來(lái)說(shuō)的確不錯(cuò),但對(duì)于值來(lái)說(shuō)就存在問(wèn)題了。因?yàn)槟0鍏?shù)推導(dǎo)為initializer_list,而參數(shù)傳遞需要的是vector,使用這種方式還得手動(dòng)創(chuàng)建一個(gè)臨時(shí)的vector。所以,具體問(wèn)題具體分析,才能選擇最恰當(dāng)?shù)姆绞?,有時(shí)甚至可以組合使用。大家也許注意到,開(kāi)銷(xiāo)對(duì)比圖標(biāo)題為"初始化Long String成員開(kāi)銷(xiāo)圖",那么還有短String嗎?

6.1SSO短字符串優(yōu)化

各家編譯器在實(shí)現(xiàn)std::string時(shí),基本都會(huì)采取一種SSO(Small String Optimization)策略。

此時(shí),對(duì)于短字符串,將不會(huì)在堆上額外分配內(nèi)存,而是直接存儲(chǔ)在棧上。比如,有些實(shí)現(xiàn)會(huì)在size的最低標(biāo)志位上用1代表長(zhǎng)字符串,0代表短字符串,根據(jù)這個(gè)標(biāo)志位來(lái)決定操作形式。

可以通過(guò)重載operator new和operator delete來(lái)捕獲堆分配情況,一個(gè)例子如下:
std::size_tallocated=0;

void*operatornew(size_tsz){
void*p=std::malloc(sz);
allocated+=sz;
returnp;
}

voidoperatordelete(void*p)noexcept{
returnstd::free(p);
}

intmain(){
allocated=0;
std::strings("hi");
std::printf("stackspace=%zu,heapspace=%zu,capacity=%zu
",
sizeof(s),allocated,s.capacity());
}
例子來(lái)源:https://stackoverflow.com/a/28003328
在clang 14.0.0上得出的結(jié)果為:
stackspace=32,heapspace=0,capacity=15

可以看到,對(duì)于短字符串,將不會(huì)在堆上分配額外的內(nèi)存,內(nèi)容實(shí)際存在在棧上。

早期版本的編譯器可能沒(méi)有這種優(yōu)化,但如今的版本基本都有。

也就是說(shuō),這時(shí)的移動(dòng)操作實(shí)際就相當(dāng)于復(fù)制操作。于是開(kāi)銷(xiāo)就可以如下圖表示。6c56f794-6bab-11ed-8abf-dac502259ad0.png

于是可以得出結(jié)論:盡管小對(duì)象的拷貝操作很快,call by-value還是要慢于其他方式,string_view則是一種較好的方式。

但是,string_view使用起來(lái)要格外當(dāng)心,若你不想為此操心,使用call by-const-reference則是一種不錯(cuò)的方式。

6.2無(wú)拷貝,無(wú)移動(dòng)

當(dāng)僅需要接受參數(shù),之后即不拷貝,也無(wú)移動(dòng)的情境下,情況又不一樣。

此時(shí)的開(kāi)銷(xiāo)如下圖。

6c804400-6bab-11ed-8abf-dac502259ad0.png ?前三種方式對(duì)于隱式構(gòu)造,都會(huì)產(chǎn)生一個(gè)臨時(shí)對(duì)象,故皆含一次分配。后兩種方式?jīng)]有這次額外分配。Views的創(chuàng)建非常之輕,可忽略不計(jì);Forwarding references經(jīng)過(guò)TAD推導(dǎo)的參數(shù)為常量串,也無(wú)消耗。總的來(lái)說(shuō),我們能得出,通常情況下,后兩種方式在這種情境下是一種開(kāi)銷(xiāo)更小的方式。若不考慮隱式構(gòu)造,則除了call by-value,其他方式是一種開(kāi)銷(xiāo)更小的方式。

6.3優(yōu)化限制:Aliasing situations

Aliasing situations指的是多個(gè)變量實(shí)際指向的是同一塊內(nèi)存,這些變量之間互為別名。這種情況會(huì)導(dǎo)致編譯器束手束腳,不敢優(yōu)化。

以引用的方式傳遞參數(shù)便會(huì)產(chǎn)生許多額外的Aliasing situations。

舉個(gè)例子:

intfoo_by_ref(constS&s){
intm=s.value;
bar();
intn=s.value;
returnm+n;
}

intfoo_by_value(Ss){
intm=s.value;
bar();
intn=s.value;
returnm+n;
}

例子來(lái)源:https://reductor.dev/cpp/2022/06/27/pass-by-value-vs-pass-by-reference.html

引用傳遞版本,編譯器無(wú)法判定bar()中是否修改了s.value,比如s引用的是一個(gè)全局變量,bar()中就可以修改它。因此,m和n的值可能并不相同,編譯器必須加載兩次s.value。

而值傳遞版本,由于參數(shù)進(jìn)行了拷貝,不存在外部修改,m和n的值肯定相同,于是編譯器可以?xún)?yōu)化為只加載一次s.value。

這是call by-const-reference的另一處缺點(diǎn),它可能會(huì)限制編譯器的優(yōu)化,而這又恰恰成了call by-value的一個(gè)優(yōu)點(diǎn)。

7總結(jié)

本篇文章介紹了5種初始化String成員的方式,詳細(xì)分析對(duì)比了它們的開(kāi)銷(xiāo)。

沒(méi)有哪種方式是最優(yōu)解,如何選擇需要依具體情況而論。

Two-overloads這種方式一般不會(huì)考慮,因?yàn)榭傆衅渌绞奖人拈_(kāi)銷(xiāo)更小,還只需編寫(xiě)一個(gè)函數(shù)。

string_view在很多情況下的開(kāi)銷(xiāo)可觀,但是需要格外注意潛在的懸垂引用問(wèn)題。

其他三種方式亦是有利有弊,可根據(jù)文中提及的各種情況進(jìn)行分析。

總而言之,各方式之間存在著細(xì)微而本質(zhì)的差別,且還有許多特殊情況需要單獨(dú)分析,開(kāi)銷(xiāo)在不同情境下也不盡相同。

一句話,看情況。

審核編輯 :李倩


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

    關(guān)注

    22

    文章

    2120

    瀏覽量

    76444
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    615

    瀏覽量

    29278
  • string
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    4993

原文標(biāo)題:5 種方式初始化 String 成員,怎樣選擇?

文章出處:【微信號(hào):CPP開(kāi)發(fā)者,微信公眾號(hào):CPP開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    GraniStudio:IO初始化以及IO資源配置例程

    1.文件運(yùn)行 導(dǎo)入工程 雙擊運(yùn)行桌面GraniStudio.exe。 通過(guò)引導(dǎo)界面導(dǎo)入IO初始化以及IO資源配置例程,點(diǎn)擊導(dǎo)入按鈕。 打開(kāi)IO初始化以及IO資源配置例程所在路徑,選中IO初始化以及
    的頭像 發(fā)表于 08-22 17:34 ?633次閱讀
    GraniStudio:IO<b class='flag-5'>初始化</b>以及IO資源配置例程

    GraniStudio:初始化例程

    1.文件運(yùn)行 導(dǎo)入工程 雙擊運(yùn)行桌面GraniStudio.exe。 通過(guò)引導(dǎo)界面導(dǎo)入初始化例程,點(diǎn)擊導(dǎo)入按鈕。 打開(kāi)初始化例程所在路徑,選中初始化.gsp文件,點(diǎn)擊打開(kāi),完成導(dǎo)入。 2.功能
    的頭像 發(fā)表于 08-22 16:45 ?606次閱讀
    GraniStudio:<b class='flag-5'>初始化</b>例程

    MCU外設(shè)初始化:為什么參數(shù)配置必須優(yōu)先于使能

    在微控制器領(lǐng)域,初始化參數(shù)配置階段至關(guān)重要。此時(shí),雖無(wú)電源驅(qū)動(dòng),但微控制器在使能信號(hào)到來(lái)前,借初始化參數(shù)配置這一精細(xì)步驟,開(kāi)啟關(guān)鍵準(zhǔn)備進(jìn)程。初始化參數(shù)配置如同物理坐標(biāo)錨定、邏輯指令部署、內(nèi)在秩序預(yù)設(shè)
    的頭像 發(fā)表于 08-13 10:38 ?426次閱讀

    定義IO初始化結(jié)構(gòu)體

    由上述IOPORT相關(guān)功能的枚舉類(lèi)型我們可以知道,在對(duì)IOPORT模塊進(jìn)行初始化時(shí)需要根據(jù)情況配置它們。因此我們定義一個(gè)IOPORT初始化的結(jié)構(gòu)體類(lèi)型IOPORT_Init_t,它的成員包括了由上述所有枚舉類(lèi)型所聲明的變量,因此
    的頭像 發(fā)表于 07-16 16:26 ?946次閱讀

    IM 系列設(shè)備過(guò)載保護(hù)機(jī)制下界面初始化中斷的底層邏輯與解決方案

    一、過(guò)載保護(hù)機(jī)制與界面初始化的關(guān)聯(lián)基礎(chǔ) IM 系列設(shè)備的過(guò)載保護(hù)機(jī)制是保障設(shè)備安全運(yùn)行的核心功能,其通過(guò)傳感器實(shí)時(shí)采集設(shè)備運(yùn)行參數(shù),如電流、電壓、溫度、系統(tǒng)資源占用率等。一旦這些參數(shù)超出預(yù)設(shè)閾值
    的頭像 發(fā)表于 06-27 09:58 ?261次閱讀

    使用PyQt5自動(dòng)初始化OpenVINO?環(huán)境出現(xiàn)報(bào)錯(cuò)怎么解決?

    編寫(xiě)了一個(gè)程序以使用 PyQt5 自動(dòng)初始化OpenVINO?環(huán)境:從 PyQt5 導(dǎo)入 QtWidgets 導(dǎo)入操作系統(tǒng) #import時(shí)間 導(dǎo)入系統(tǒng) 如果__name__
    發(fā)表于 03-07 06:35

    STM32CubeMX用于STM32配置和初始化C代碼生成

    電子發(fā)燒友網(wǎng)站提供《STM32CubeMX用于STM32配置和初始化C代碼生成.pdf》資料免費(fèi)下載
    發(fā)表于 02-26 17:32 ?677次下載

    EE-359:ADSP-CM40x啟動(dòng)時(shí)間優(yōu)化和器件初始化

    電子發(fā)燒友網(wǎng)站提供《EE-359:ADSP-CM40x啟動(dòng)時(shí)間優(yōu)化和器件初始化.pdf》資料免費(fèi)下載
    發(fā)表于 01-13 16:33 ?0次下載
    EE-359:ADSP-CM40x啟動(dòng)時(shí)間優(yōu)化和器件<b class='flag-5'>初始化</b>

    EE-88:使用21xx編譯器在C中初始化變量

    電子發(fā)燒友網(wǎng)站提供《EE-88:使用21xx編譯器在C中初始化變量.pdf》資料免費(fèi)下載
    發(fā)表于 01-13 15:54 ?0次下載
    EE-88:使用21xx編譯器在C中<b class='flag-5'>初始化</b>變量

    OMAP5912多媒體處理器初始化參考指南

    電子發(fā)燒友網(wǎng)站提供《OMAP5912多媒體處理器初始化參考指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-17 16:20 ?0次下載
    OMAP5912多媒體處理器<b class='flag-5'>初始化</b>參考指南

    STM32F407 MCU使用SD NAND?不斷電初始化失效解決方案

    STM32F407微控制器單元(MCU)與SD NAND的結(jié)合提供了強(qiáng)大的存儲(chǔ)解決方案。然而,不斷電初始化失效問(wèn)題可能會(huì)導(dǎo)致系統(tǒng)穩(wěn)定性和數(shù)據(jù)完整性受損。我們將STM32F407與SD NAND集成時(shí)可能遇到的初始化問(wèn)題,并提供專(zhuān)業(yè)的解決方案。
    的頭像 發(fā)表于 12-11 10:51 ?1279次閱讀
    STM32F407 MCU使用SD NAND?不斷電<b class='flag-5'>初始化</b>失效解決方案

    segger編譯器初始化問(wèn)題

    的圖; 2.第二張圖是該變量在文件中的所有操作,第一行是初始化,該行代碼在初始化部分最后一個(gè),執(zhí)行完就是主循環(huán)了; 3.第2,3行也是對(duì)變量的賦值,在主循環(huán)中; 4.第4行已注釋?zhuān)?5.第6行是對(duì)變量
    發(fā)表于 12-09 18:06

    SpringBean初始化順序

    monitorMetric; final String string; // 構(gòu)造函數(shù) public Metric (String string) { this .
    的頭像 發(fā)表于 11-06 16:04 ?560次閱讀
    SpringBean<b class='flag-5'>初始化</b>順序

    基于旋轉(zhuǎn)平移解耦框架的視覺(jué)慣性初始化方法

    精確和魯棒的初始化對(duì)于視覺(jué)慣性里程計(jì)(VIO)至關(guān)重要,因?yàn)椴涣嫉?b class='flag-5'>初始化會(huì)嚴(yán)重降低姿態(tài)精度。
    的頭像 發(fā)表于 11-01 10:16 ?1221次閱讀
    基于旋轉(zhuǎn)平移解耦框架的視覺(jué)慣性<b class='flag-5'>初始化</b>方法

    TMS320C6000 McBSP初始化

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000 McBSP初始化.pdf》資料免費(fèi)下載
    發(fā)表于 10-26 10:10 ?1次下載
    TMS320C6000 McBSP<b class='flag-5'>初始化</b>