> 编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。</P>' ]; j8 M5 C! H" }
>第1招:以空间换时间</P>
>计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。</P>$ T9 A9 R0 G2 n& Q N- n5 A5 f: P! [
>例如:字符串的赋值。</P>
>方法A,通常的办法:</P>
>#define LEN 32</P>
>char string1 [LEN];</P>3 r# u7 I3 p; T1 Q/ [
>memset (string1,0,LEN);</P>, n8 V7 T" P2 r* o3 t5 C
>strcpy (string1,"This is an example!!"</P>( u! }% J7 A: O. Y2 X$ ^
>方法B:</P>
><BR>const char string2[LEN]="This is an example!"</P>
>char*cp;</P>& f- r7 _# i, U0 n8 D$ y0 O
>cp=string2;</P>
>(使用的时候可以直接用指针来操作。)</P>
><BR>从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了 大量的内存,但是获得了程序执行的高效率。</P>) f5 U F" [, `1 h
>如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。</P>2 G( S1 S" M7 x4 h; u6 a
>该招数的边招--使用宏函数而不是函数。举例如下:</P>* G4 O, e' |3 g9 z5 x' ~
>方法C:</P>
><BR>#define bwMCDR2_ADDRESS 4</P>
>#define bsMCDR2_ADDRESS 17</P>
>int BIT_MASK (int_bf)</P>
>{</P>. h6 f1 x+ ^% C2 j" Y0 M8 H3 t
>return ((IU<<(bw##_bf))-1)<<(bs##_bf);</P>
>}</P>, l( H, N! C3 H: \% l
>void SET_BITS(int_dst,int_bf,int_val)</P>) d5 K# U, h' ]' ~2 D+ \
>{</P>, g+ @; d5 K! l9 S8 g9 S
>_dst=((_dst) & ~ (BIT_MASK(_bf)))I\ (((_val)<<<(bs##_bf))&(BIT_MASK(_bf)))</P>! l; e1 `$ V* `
>}</P>% Q, U4 P M# k0 M6 W
>SET_BITS(MCDR2,MCDR2_ADDRESS,RegisterNumber);</P>- B) I9 I5 g# H
>方法D:</P>
>呵呵,我先借来试试</P>[em04]| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |