版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語(yǔ)言程序運(yùn)行速度優(yōu)化方法談1、選擇合適的算法和數(shù)據(jù)結(jié)構(gòu)選擇一種合適的數(shù)據(jù)結(jié)構(gòu)很重要,如果在一堆隨機(jī)存放的數(shù)中使用了大量的插入和刪 除指令,那使用鏈表要快得多。數(shù)組與指針語(yǔ)句具有十分密切的關(guān)系,一般來(lái)說(shuō),指針比擬 靈活簡(jiǎn)潔,而數(shù)組那么比擬直觀,容易理解。對(duì)于大局部的編譯器,使用指針比使用數(shù)組生成 的代碼更短,執(zhí)行效率更高。在許多種情況下,可以用指針運(yùn)算代替數(shù)組索引,這樣做常常能產(chǎn)生又快又短的代碼。 與數(shù)組索弓I相比,指針一般能使代碼速度更快,占用空間更少。使用多維數(shù)組時(shí)差異更明顯。 下面的代碼作用是相同的,但是效率不一樣。數(shù)組索引 指針運(yùn)算For(;)A=arrayt+;For(;)A=arr
2、ayt+;p=arrayfor(;) a=*(p+);指針?lè)椒ǖ膬?yōu)點(diǎn)是,array的地址每次裝入地址p后,在每次循環(huán)中只需對(duì)p增量操作。 在數(shù)組索引方法中,每次循環(huán)中都必須根據(jù)t值求數(shù)組下標(biāo)的復(fù)雜運(yùn)算。2、使用盡量小的數(shù)據(jù)類(lèi)型能夠使用字符型(char)定義的變量,就不要使用整型(int)變量來(lái)定義;能夠使用整型變 量定義的變量就不要用長(zhǎng)整型(long int),能不使用浮點(diǎn)型(float)變量就不要使用浮點(diǎn)型變量。 當(dāng)然,在定義變量后不要超過(guò)變量的作用范圍,如果超過(guò)變量的范圍賦值,C編譯器并不報(bào) 錯(cuò),但程序運(yùn)行結(jié)果卻錯(cuò)了,而且這樣的錯(cuò)誤很難發(fā)現(xiàn)。在ICCAVR中,可以在Options中設(shè)定使用
3、printf參數(shù),盡量使用基本型參數(shù)(%c、d、x、X、11和$格式說(shuō)明符),少用長(zhǎng)整型參數(shù)(出、lu、以和區(qū)格式 說(shuō)明符),至于浮點(diǎn)型的參數(shù)(。那么盡量不要使用,其它C編譯器也一樣。在其它條件不變 的情況下,使用f參數(shù),會(huì)使生成的代碼的數(shù)量增加很多,執(zhí)行速度降低。3、減少運(yùn)算的強(qiáng)度(1)、查表(游戲程序員必修課)一個(gè)聰明的游戲大蝦,基本上不會(huì)在自己的主循環(huán)里搞什么運(yùn)算工作,絕對(duì)是先計(jì)算 好了,再到循環(huán)里查表??聪旅娴睦樱号f代碼:long factorial(int i)if (i = 0)return 1;do_stuff(i); i+;do_stuff(i); i+;do_stuff(i
4、); i+;do_stuff(i); i+;do_stuff(i); i+;do_stuff(i); i+;do_stuff(i); i+;do_stuff(i); i+;do_stuff(i); i+;)可以看出,新代碼里比擬指令由100次降低為10次,循環(huán)時(shí)間節(jié)約了 90%。不過(guò)注 意:對(duì)于中間變量或結(jié)果被更改的循環(huán),編譯程序往往拒絕展開(kāi),(怕?lián)?zé)任唄),這時(shí)候就需 要你自己來(lái)做展開(kāi)工作了。還有一點(diǎn)請(qǐng)注意,在有內(nèi)部指令cache的CPU上(如MMX芯片),因?yàn)檠h(huán)展開(kāi)的代 碼很大,往往cache溢出,這時(shí)展開(kāi)的代碼會(huì)頻繁地在CPU的cache和內(nèi)存之間調(diào)來(lái)調(diào)去, 又因?yàn)閏ache速度很高,
5、所以此時(shí)循環(huán)展開(kāi)反而會(huì)變慢。還有就是循環(huán)展開(kāi)會(huì)影響矢量運(yùn)算 優(yōu)化。(6)、循環(huán)嵌套把相關(guān)循環(huán)放到一個(gè)循環(huán)里,也會(huì)加快速度。舊代碼:for (i = 0; i MAX; i+)/* initialize 2d array to Os */for (j = 0; j MAX; j+)aiU = 0.0;fbr (i = 0; i MAX; i+)/* put Ts along the diagonal */aii = 1.0;新代碼:fbr (i = 0; i MAX; i+)/* initialize 2d array to Os */for (j = 0; j type)case FREQUE
6、NT_MSG1:handleFrequentMsg();break;case FREQUENT MSG2:handleFrequentMsg2();break;case FREQUENT_MSGn:handleFrequentMsgnQ;break;default:嵌套局部用來(lái)處理不經(jīng)常發(fā)生的消息switch (pMsg-type) (case INFREQUENT MSGl:handlelnfrequentMsg 1();break;case INFREQUENT_MSG2:handleInfrequentMsg2();break; o o o o o ocase INFREQUENT_MS
7、Gm:handleInfrequentMsgm();break;如果switch中每一種情況下都有很多的工作要做,那么把整個(gè)switch語(yǔ)句用一個(gè)指向 函數(shù)指針的表來(lái)替換會(huì)更加有效,比方下面的switch語(yǔ)句,有三種情況:enum MsgTypeMsgl, Msg2, Msg3switch (ReceiveMessage()(case Msgl;o o o o o ocase Msg2;case Msg3;)為了提高執(zhí)行速度,用下面這段代碼來(lái)替換這個(gè)上面的switch語(yǔ)句。/*準(zhǔn)備工作*/int handleMsg 1 (void);int handleMsg2(void);int handl
8、eMsg3(void);/*創(chuàng)立一個(gè)函數(shù)指針數(shù)組*/int (*MsgFunction )()= handleMsg 1, handleMsg2, handleMsg3;/*用下面這行更有效的代碼來(lái)替換switch語(yǔ)句*/status=MsgFunctionReceiveMessage()();(9)、循環(huán)轉(zhuǎn)置有些機(jī)器對(duì)JNZ(為0轉(zhuǎn)移)有特別的指令處理,速度非???,如果你的循環(huán)對(duì)方向不敏 感,可以由大向小循環(huán)。舊代碼:for (i = 1; i = MAX; i+)(o o o)新代碼:i = MAX+l;while (i)(o o o不過(guò)千萬(wàn)注意,如果指針操作使用了 i值,這種方法可能引起
9、指針越界的嚴(yán)重錯(cuò)誤(i = MAX+l;)o當(dāng)然你可以通過(guò)對(duì)i做加減運(yùn)算來(lái)糾正,但是這樣就起不到加速的作用,除非類(lèi) 似于以下情況:舊代碼:char aMAX+5;fbr (i = 1; i = MAX; i+)*(a+i+4 尸 0;新代碼:i = MAX+l;while (-i)*(a+i+4)=0;(10)、公用代碼塊一些公用處理模塊,為了滿(mǎn)足各種不同的調(diào)用需要,往往在內(nèi)部采用了大量的 if-then-else結(jié)構(gòu),這樣很不好,判斷語(yǔ)句如果太復(fù)雜,會(huì)消耗大量的時(shí)間的,應(yīng)該盡量減少 公用代碼塊的使用。(任何情況下,空間優(yōu)化和時(shí)間優(yōu)化都是對(duì)立的-東樓)。當(dāng)然,如果僅 僅是一個(gè)(3=x)之類(lèi)的簡(jiǎn)
10、單判斷,適當(dāng)使用一下,也還是允許的。記住,優(yōu)化永遠(yuǎn)是追求一 種平衡,而不是走極端。(11)提升循環(huán)的性能要提升循環(huán)的性能,減少多余的常量計(jì)算非常有用(比方,不隨循環(huán)變化的計(jì)算)。 不好的代碼(在for()中包含不變的if():fbr( i o o o )if( CONSTANTO )(DoWorkO( i); /假設(shè)這里不改變CONSTANTO的值)else(DoWorkl(i); /假設(shè)這里不改變CONSTANTO的值)推薦的代碼:iR CONSTANTO)fbr( i o o o )(DoWorkO( i );elsefbr( i o o o )jDoWorkl(i);)如果已經(jīng)知道if(
11、)的值,這樣可以防止重復(fù)計(jì)算。雖然不好的代碼中的分支可以簡(jiǎn)單地預(yù)測(cè), 但是由于推薦的代碼在進(jìn)入循環(huán)前分支已經(jīng)確定,就可以減少對(duì)分支預(yù)測(cè)的依賴(lài)。(12)、選擇好的無(wú)限循環(huán)在編程中,我們常常需要用到無(wú)限循環(huán),常用的兩種方法是while (1)和for (; ; )o這 兩種方法效果完全一樣,但那一種更好呢?然我們看看它們編譯后的代碼:編譯前:while (1); 編譯后:mov eax, 1 test eax, eax je foo+23h jmp foo+18h 編譯前:for (;); 編譯后:jmp fbo+23h顯然,for(;)指令少,不占用寄存器,而且沒(méi)有判斷、跳轉(zhuǎn),比while (1
12、)好。6、提高CPU的并行性(1)使用并行代碼盡可能把長(zhǎng)的有依賴(lài)的代碼鏈分解成幾個(gè)可以在流水線(xiàn)執(zhí)行單元中并行執(zhí)行的沒(méi)有依 賴(lài)的代碼鏈。很多高級(jí)語(yǔ)言,包括C+,并不對(duì)產(chǎn)生的浮點(diǎn)表達(dá)式重新排序,因?yàn)槟鞘且粋€(gè) 相當(dāng)復(fù)雜的過(guò)程。需要注意的是,重排序的代碼和原來(lái)的代碼在代碼上一致并不等價(jià)于計(jì)算 結(jié)果一致,因?yàn)楦↑c(diǎn)操作缺乏精確度。在一些情況下,這些優(yōu)化可能導(dǎo)致意料之外的結(jié)果。 幸運(yùn)的是,在大局部情況下,最后結(jié)果可能只有最不重要的位(即最低位)是錯(cuò)誤的。 不好的代碼:double a100, sum;int i;sum = O.Of;for (i=0; i100; i+)sum += ai;推薦的代碼:do
13、uble a100, suml, sum2, sum3, sum4, sum;int i;suml = sum2 = sum3 = sum4 = 0.0;for (i = 0; i 100; i += 4)(suml += ai;sum2 += ai+l;sum3 += ai+2;sum4 += ai+3;)sum = (sum4+sum3)+(sum 1 +sum2);要注意的是:使用4路分解是因?yàn)檫@樣使用了4段流水線(xiàn)浮點(diǎn)加法,浮點(diǎn)加法的每一 個(gè)段占用一個(gè)時(shí)鐘周期,保證了最大的資源利用率。(2)防止沒(méi)有必要的讀寫(xiě)依賴(lài)當(dāng)數(shù)據(jù)保存到內(nèi)存時(shí)存在讀寫(xiě)依賴(lài),即數(shù)據(jù)必須在正確寫(xiě)入后才能再次讀取。雖然 A
14、MD Athlon等CPU有加速讀寫(xiě)依賴(lài)延遲的硬件,允許在要保存的數(shù)據(jù)被寫(xiě)入內(nèi)存前讀取 出來(lái),但是,如果防止了讀寫(xiě)依賴(lài)并把數(shù)據(jù)保存在內(nèi)部寄存器中,速度會(huì)更快。在一段很長(zhǎng) 的又互相依賴(lài)的代碼鏈中,防止讀寫(xiě)依賴(lài)顯得尤其重要。如果讀寫(xiě)依賴(lài)發(fā)生在操作數(shù)組時(shí), 許多編譯器不能自動(dòng)優(yōu)化代碼以防止讀寫(xiě)依賴(lài)。所以推薦程序員手動(dòng)去消除讀寫(xiě)依賴(lài),舉例 來(lái)說(shuō),引進(jìn)一個(gè)可以保存在寄存器中的臨時(shí)變量。這樣可以有很大的性能提升。下面一段代 碼是一個(gè)例子:不好的代碼:float xVECLEN, yVECLEN, zVECLEN;o o o o o ofbr (unsigned int k = 1 ; k VECLEN ;
15、 k +)sxk = xk-l + yk;)for(k= 1; k VECLEN ; k+)(xk = zk * (yk - xk-l);)推薦的代碼:float xVECLEN, yVECLEN, zVECLEN;o o o o o ofloat t(xOJ);fbr (unsigned int k = 1 ; k VECLEN ; k +)t = t + yk;xk = t;)t = x|01;for (k= 1; kb-c 4 -aardvark +a-b-c4-baboon +a-b-c4-cheetah +a-b-c4-dog;新代碼:struct animals * temp =
16、a-b-c4;total =temp-aardvark +temp-baboon +temp-cheetah +temp-dog;一些老的C語(yǔ)言編譯器不做聚合優(yōu)化,而符合ANSI規(guī)范的新的編譯器可以自動(dòng)完成 這個(gè)優(yōu)化,看例子:float a, b, c, d, f, g;o o oa = b / c * d;f = b * g / c;這種寫(xiě)法當(dāng)然要得,但是沒(méi)有優(yōu)化float a, b, c, d, f, g;o o oa = b / c * d;f = b / c * g;如果這么寫(xiě)的話(huà),一個(gè)符合ANSI規(guī)范的新的編譯器可以只計(jì)算b/c一次,然后將結(jié)果代入 第二個(gè)式子,節(jié)約了一次除法運(yùn)算。8
17、、函數(shù)優(yōu)化(1) Inline 函數(shù)在C+中,關(guān)鍵字Inline可以被加入到任何函數(shù)的聲明中。這個(gè)關(guān)鍵字請(qǐng)求編譯器用函 數(shù)內(nèi)部的代碼替換所有對(duì)于指出的函數(shù)的調(diào)用。這樣做在兩個(gè)方面快于函數(shù)調(diào)用:第一, 省去了調(diào)用指令需要的執(zhí)行時(shí)間;第二,省去了傳遞變?cè)蛡鬟f過(guò)程需要的時(shí)間。但是使用 這種方法在優(yōu)化程序速度的同時(shí),程序長(zhǎng)度變大了,因此需要更多的ROM。使用這種優(yōu)化 在Inline函數(shù)頻繁調(diào)用并且只包含幾行代碼的時(shí)候是最有效的。(2)不定義不使用的返回值函數(shù)定義并不知道函數(shù)返回值是否被使用,假如返回值從來(lái)不會(huì)被用到,應(yīng)該使用void 來(lái)明確聲明函數(shù)不返回任何值。elsereturn i * fact
18、orial(i - 1);)新代碼:static long factorial_table=1, 1, 2, 6, 24, 120, 720 /* etc */;long factorial(int i)return factorial_tablei;)如果表很大,不好寫(xiě),就寫(xiě)一個(gè)init函數(shù),在循環(huán)外臨時(shí)生成表格。(2)、求余運(yùn)算a=a%8;可以改為:a=a&7;說(shuō)明:位操作只需一個(gè)指令周期即可完成,而大局部的C編譯器的“”運(yùn)算均是調(diào)用子程 序來(lái)完成,代碼長(zhǎng)、執(zhí)行速度慢。通常,只要求是求2n方的余數(shù),均可使用位操作的方法 來(lái)代替。(3)、平方運(yùn)算a=pow(a, 2.0);可以改為:a=a*
19、a;說(shuō)明:在有內(nèi)置硬件乘法器的單片機(jī)中(如51系列),乘法運(yùn)算比求平方運(yùn)算快得多,因?yàn)?浮點(diǎn)數(shù)的求平方是通過(guò)調(diào)用子程序來(lái)實(shí)現(xiàn)的,在自帶硬件乘法器的AVR單片機(jī)中,如 ATMegal63中,乘法運(yùn)算只需2個(gè)時(shí)鐘周期就可以完成。既使是在沒(méi)有內(nèi)置硬件乘法器的 AVR單片機(jī)中,乘法運(yùn)算的子程序比平方運(yùn)算的子程序代碼短,執(zhí)行速度快。如果是求3次方,如:a=pow(a, 3o 0);更改為:a=a*a*a;那么效率的改善更明顯。(4)、用移位實(shí)現(xiàn)乘除法運(yùn)算a=a*4;b=b/4;(3)減少函數(shù)調(diào)用參數(shù)使用全局變量比函數(shù)傳遞參數(shù)更加有效率。這樣做去除了函數(shù)調(diào)用參數(shù)入棧和函數(shù)完成 后參數(shù)出棧所需要的時(shí)間。然而
20、決定使用全局變量會(huì)影響程序的模塊化和重入,故要慎重使 用。(4)所有函數(shù)都應(yīng)該有原型定義一般來(lái)說(shuō),所有函數(shù)都應(yīng)該有原型定義。原型定義可以傳達(dá)給編譯器更多的可能用于 優(yōu)化的信息。(5)盡可能使用常量(const)盡可能使用常量(const)。C+標(biāo)準(zhǔn)規(guī)定,如果一個(gè)const聲明的對(duì)象的地址不被獲取, 允許編譯器不對(duì)它分配儲(chǔ)存空間。這樣可以使代碼更有效率,而且可以生成更好的代碼。(6)把本地函數(shù)聲明為靜態(tài)的(static)如果一個(gè)函數(shù)只在實(shí)現(xiàn)它的文件中被使用,把它聲明為靜態(tài)的(static)以強(qiáng)制使用內(nèi)部 連接。否那么,默認(rèn)的情況下會(huì)把函數(shù)定義為外部連接。這樣可能會(huì)影響某些編譯器的優(yōu)化一 一比方,
21、自動(dòng)內(nèi)聯(lián)。9、采用遞歸與LISP之類(lèi)的語(yǔ)言不同,C語(yǔ)言一開(kāi)始就病態(tài)地喜歡用重復(fù)代碼循環(huán),許多C程序員 都是除非算法要求,堅(jiān)決不用遞歸。事實(shí)上,C編譯器們對(duì)優(yōu)化遞歸調(diào)用一點(diǎn)都不反感,相 反,它們還很喜歡干這件事。只有在遞歸函數(shù)需要傳遞大量參數(shù),可能造成瓶頸的時(shí)候,才 應(yīng)該使用循環(huán)代碼,其他時(shí)候,還是用遞歸好些。10、變量(1) register 變量在聲明局部變量的時(shí)候可以使用register關(guān)鍵字。這就使得編譯器把變量放入一個(gè)多 用途的寄存器中,而不是在堆棧中,合理使用這種方法可以提高執(zhí)行速度。函數(shù)調(diào)用越是頻 繁,越是可能提高代碼的速度。在最內(nèi)層循環(huán)防止使用全局變量和靜態(tài)變量,除非你能確定它在
22、循環(huán)周期中不會(huì)動(dòng)態(tài) 變化,大多數(shù)編譯器優(yōu)化變量都只有一個(gè)方法,就是將他們置成寄存器變量,而對(duì)于動(dòng)態(tài)變 量,它們干脆放棄對(duì)整個(gè)表達(dá)式的優(yōu)化。盡量防止把一個(gè)變量地址傳遞給另一個(gè)函數(shù),雖然 這個(gè)還很常用。C語(yǔ)言的編譯器們總是先假定每一個(gè)函數(shù)的變量都是內(nèi)部變量,這是由它的 機(jī)制決定的,在這種情況下,它們的優(yōu)化完成得最好。但是,一旦一個(gè)變量有可能被別的函 數(shù)改變,這幫兄弟就再也不敢把變量放到寄存器里了,嚴(yán)重影響速度??蠢樱篴 = b();c(&d);因?yàn)閐的地址被C函數(shù)使用,有可能被改變,編譯器不敢把它長(zhǎng)時(shí)間的放在寄存器里, 一旦運(yùn)行到c(&d),編譯器就把它放回內(nèi)存,如果在循環(huán)里,會(huì)造成N次頻繁的在
23、內(nèi)存和寄 存器之間讀寫(xiě)d的動(dòng)作,眾所周知,CPU在系統(tǒng)總線(xiàn)上的讀寫(xiě)速度慢得很。比方你的賽楊300, CPU主頻300,總線(xiàn)速度最多66M,為了一個(gè)總線(xiàn)讀,CPU可能要等4-5個(gè)周期,得。得。 得。想起來(lái)都打顫。(2)、同時(shí)聲明多個(gè)變量?jī)?yōu)于單獨(dú)聲明變量(3)、短變量名優(yōu)于長(zhǎng)變量名,應(yīng)盡量使變量名短一點(diǎn)(4)、在循環(huán)開(kāi)始前聲明變量11、使用嵌套的if結(jié)構(gòu)在if結(jié)構(gòu)中如果要判斷的并列條件較多,最好將它們拆分成多個(gè)if結(jié)構(gòu),然后嵌套在 一起,這樣可以防止無(wú)謂的判斷。說(shuō)明:上面的優(yōu)化方案由王全明。很多資料來(lái)源與網(wǎng)上,出處不祥,在此對(duì)所有作者 一并致謝!該方案主要是考慮到在嵌入式開(kāi)發(fā)中對(duì)程序執(zhí)行速度的要求
24、特別高,所以該方案主要是 為了優(yōu)化程序的執(zhí)行速度。注意:優(yōu)化是有側(cè)重點(diǎn)的,優(yōu)化是一門(mén)平衡的藝術(shù),它往往要以犧牲程序的可讀性或者 增加代碼長(zhǎng)度為代價(jià)。(任何情況下,空間優(yōu)化和時(shí)間優(yōu)化都是對(duì)立的-東樓)。 Feisky出處:可以改為:a=a2;b=b2;通常如果需要乘以或除以2m都可以用移位的方法代替。在ICCAVR中,如果乘以 2n,都可以生成左移的代碼,而乘以其它的整數(shù)或除以任何數(shù),均調(diào)用乘除法子程序。用移 位的方法得到代碼比調(diào)用乘除法子程序生成的代碼效率高。實(shí)際上,只要是乘以或除以一個(gè) 整數(shù),均可以用移位的方法得到結(jié)果,如:a=a*9可以改為:a=(a3)+a采用運(yùn)算量更小的表達(dá)式替換原來(lái)的
25、表達(dá)式,下面是一個(gè)經(jīng)典例子: 舊代碼:x = w % 8;y = pow(x, 2.0);z = y * 33;for (i = 0;i MAX;i+)(h = 14 * i;printf(n%dH, h);)新代碼:x = w & 7;/*位操作比求余運(yùn)算快*/y = x * x; /*乘法比平方運(yùn)算快*/z = (y 5) + y; /*位移乘法比乘法快*/for (i = h = 0; i 0)while (*q (*r = a / *q)(*q = (*q + *r) 1 ;)r = a - *q * *q;推薦的代碼:/假設(shè)q != rvoid isqrt(unsigned long a, unsigned long* q, unsigned long* r) unsigned long qq, rr;qq = a;if(a0)while (qq (rr = a / qq)(qq = (qq + rr) 1 ;)rr = a - qq * qq;q = qq;r = rr;)5、循環(huán)優(yōu)化(1)、充分分解小的循環(huán)要充分利用CPU的指令緩存,就要充分分解小的循環(huán)。特別是當(dāng)循環(huán)體本身很小的時(shí) 候,分解循環(huán)可以提高性能。注意:很多編譯器并不能自動(dòng)分解循環(huán)。不好的代碼:/ 3D轉(zhuǎn)化:把矢量V和4x4
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《湖湘文學(xué)教育論》課件
- 《竹與中國(guó)文化》課件
- 小學(xué)一年級(jí)10到20加減法練習(xí)題口算
- 防校園欺凌講座心得體會(huì)
- 《病例神經(jīng)內(nèi)科》課件
- 服裝行業(yè)前臺(tái)服務(wù)要點(diǎn)
- 礦產(chǎn)行業(yè)人才培養(yǎng)總結(jié)
- 課堂氛圍與學(xué)習(xí)積極性提升計(jì)劃
- 家政服務(wù)行業(yè)客服工作總結(jié)
- 安徽省宿州市埇橋區(qū)教育集團(tuán)2022-2023學(xué)年九年級(jí)上學(xué)期期末質(zhì)量檢化學(xué)試題
- 《鋰離子電池用二氟草酸硼酸鋰》
- 湖南省部分學(xué)校2023-2024學(xué)年高二上學(xué)期期末聯(lián)合考試政治試卷 含解析
- 中學(xué)生心理健康教育主題班會(huì)課件
- 電大《人力資源管理》期末復(fù)習(xí)綜合練習(xí)題答案(2024年)
- 西師版數(shù)學(xué)(四上題)2023-2024學(xué)年度小學(xué)學(xué)業(yè)質(zhì)量監(jiān)測(cè)(試卷)
- 2022-2023學(xué)年廣東省廣州市白云區(qū)華南師大附屬太和實(shí)驗(yàn)學(xué)校九年級(jí)(上)期末數(shù)學(xué)試卷(含答案)
- 2024年煤礦安全生產(chǎn)知識(shí)競(jìng)賽題庫(kù)及答案(共100題)
- 強(qiáng)制報(bào)告制度課件
- 《礦山隱蔽致災(zāi)因素普查規(guī)范》解讀培訓(xùn)
- 2024年世界職業(yè)院校技能大賽中職組“節(jié)水系統(tǒng)安裝與維護(hù)組”賽項(xiàng)考試題庫(kù)(含答案)
- 大型活動(dòng)車(chē)輛調(diào)度管理方案
評(píng)論
0/150
提交評(píng)論