Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!onodera-news!newsfeed.media.kyoto-u.ac.jp!newsfeed.mesh.ad.jp!news-sv.sinet!kinds.kumamoto-u.ac.jp!oix.u-ryukyu.ac.jp!u-ryukyu.ac.jp!ie.u-ryukyu.ac.jp!gama.is.tsukuba.ac.jp!yas From: yas@is.tsukuba.ac.jp (Yasushi Shinjo) Newsgroups: fj.comp.lang.c Subject: Re: =?ISO-2022-JP?B?GyRCOT1CJEJOJE4lYSVzJVAkTjUtMjEwaCROPWcbKEI=?= Date: 22 Aug 2003 16:24:02 GMT Organization: Institute of Information Sciences and Electronics, University of Tsukuba Lines: 44 Message-ID: References: <871xve8046.wl@anago2.mas.chi.its.hiroshima-cu.ac.jp> NNTP-Posting-Host: kirk.hlla.is.tsukuba.ac.jp X-Trace: gama.is.tsukuba.ac.jp 1061569097 13089 130.158.85.129 (22 Aug 2003 16:18:17 GMT) X-Complaints-To: usenet@gama.is.tsukuba.ac.jp NNTP-Posting-Date: 22 Aug 2003 16:18:17 GMT In-reply-to: Fujii Hironori's message of Fri, 22 Aug 2003 19:20:25 +0900 Xref: ccsf.homeunix.org fj.comp.lang.c:41 新城@筑波大学情報です。こんにちは。 In article <871xve8046.wl@anago2.mas.chi.its.hiroshima-cu.ac.jp> Fujii Hironori writes: > 構造体のメンバの記憶域は並べられた順に割り当てらることとなっていますが、 > これには何か理由がありますか。 はい。ハードウェアのレジスタを叩く時に、書いた通りの順番でな いと困るからです。C言語はOSのカーネルを記述するために作ら れた言語なので。 > struct foo { > char a; > int b; > char c; > }; > このとき、並べられた順に a,b,c で割り当てるより、 > a,c,b とした方がたいてい詰め物が少ないと思うので。 結局、入れ替え可能だった場合は、プログラマに入れ替えてもらえ ばいいというのが、C言語の思想です。 In article manmos@stellar.co.jp (Hideo "Sir MaNMOS" Morishita) writes: > > このとき、並べられた順に a,b,c で割り当てるより、 > > a,c,b とした方がたいてい詰め物が少ないと思うので。 > ならびが保証されていないと、むっちゃ困りますけど、理解できません? 別に、「むちゃくちゃ」は、困らないんじゃないかなあ。せっかく よい質問をしてくれているのに。なにもそこまで言わなくても。 手で順序を入れ替えて、ソースを再コンパイルして動くようなプロ グラムの場合、コンパイラで自動的に入れ替えても結論は同じです。 そんなプログラムを書いている限りは、困ることはありません。 今となっては、標準でコンパイラに構造体の順番の入れ替えを許す ことにした方が、最適化が効いていいんでしょうね。キャッシュの 関係で、順番を入れ替えたり、意図的に穴をあけたりすると、プロ グラムが速くなることがあります。この手の最適化は、CPUに依 存するので、本来はプログラマがやる仕事ではありません。コンパ イラの仕事です。 \\ 新城 靖 (しんじょう やすし) \\ \\ 筑波大学 電子・情報       \\