[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[WitchTech 00658] Re: ご返事ありがとうございました。
- Subject: [WitchTech 00658] Re: ご返事ありがとうございました。
- From: narunaru@123mail.net
- Date: Sat, 27 Jan 2001 15:11:11 +0900 (JST)
なるなると申します。
# うえけんさんは当然わかっておられるでしょうけど ...
> <3A71A49B.44260BCC@pluto.dti.ne.jp>
> From: ueken@pluto.dti.ne.jp
> Date: Sat, 27 January 2001 01:23:55 +0900
> Cで最適化する場合の注意点は、
> 2.構造体のメンバー配置に気をつける。確かターボCは構造体
> をそのまま並べて配置したはずなので、奇数番地から2バイトの
> メンバーが開始しないようにする。
# そのままって padding が入らないという意味ですよね。(自動的に並べ替えるコ
ンパイラはないと思うので)
変数を word align (TC2 でできるかどうかはしりません) させて、奇数バイトの
メンバーは構造体の後半にうまく並べて書く。でしょう。
> 4.ビットフィールドは使わない。unsignedも使わない(多くの
> 場合unsignedは不要)。2のべき乗の乗除算はシフトにする。
> 扱う数値にマイナスがありえないからといって、安易にunsigned
> を使わないこと。
2 のべき乗の除算をシフトで書けるのは場合によります。(必要な精度によっては
問題にならないでしょうけど。)
あと 1. と同じことですが、
1.1 共通部分式を手で括りだす。たとえば
c3 = csrc[3*2+j];
c2 = csrc[2*2+j];
c1 = csrc[1*2+j];
c0 = csrc[0*2+j];
cdst[0*2+j] =
(c3 & 0x80) >> 4 |
(c2 & 0x80) >> 5 |
(c1 & 0x80) >> 6 |
(c0 & 0x80) >> 7 ;
cdst[1*2+j] =
(c3 & 0x40) >> 3 |
(c2 & 0x40) >> 4 |
(c1 & 0x40) >> 5 |
(c0 & 0x40) >> 6 ;
/* cdst + j も計算してしまったほうが良いかも */
こんな感じです。(効果が出るとは限りませんが ...)
# 前に話題になったコードに関していうと cdst と csrc が重ならない保証がない
ので、コンパイラにはこの書き換えは行えません。(危ない最適化オプションを指
定すれば別ですが。)
ML Archives