スレッドメモ

MLやNewsのスレッドをメモする試み。

2003|01|02|04|05|06|07|08|10|11|
2004|01|04|05|06|07|08|09|11|12|
2005|01|02|04|08|09|
2006|01|03|04|08|
2007|01|05|
2009|05|

2003-08-22 (金)

[fj][fj.comp.lang.c] 構造体のメンバの記憶域の順

<871xve8046.wl@anago2.mas.chi.its.hiroshima-cu.ac.jp> Fujii Hironori (8/22)

構造体のメンバの記憶域は並べられた順に割り当てらることとなっていますが、これには何か理由がありますか。

<squ7k56vv9z.fsf@stellar.co.jp> Hideo "Sir MaNMOS" Morishita (8/22)

ならびが保証されていないと、むっちゃ困りますけど、理解できません?

<bi586t$i2n$1@ns.src.ricoh.co.jp> Junn Ohta (8/22)

のように構造体を宣言しておいて、任意の長さの領域をmalloc()してからstruct foo *にキャストして使うなんてことをむかしのプログラムはよくやってました。つまりsに任意の長さの領域を割り当てたいからです。

処理系がメンバーの割り当て順序を自由に変更してよいことになったら、この手のプログラムは動かなくなる可能性がありますね。

<YAS.03Aug23012402@kirk.is.tsukuba.ac.jp> Yasushi Shinjo (8/23)

はい。ハードウェアのレジスタを叩く時に、書いた通りの順番でないと困るからです。C言語はOSのカーネルを記述するために作られた言語なので。

<bi73b2$u5m$1@bluegill.lbm.go.jp> toda (8/23)

「並び順による照合」を前提に考えれば、コンパイラが勝手に順番を変えたら困ることは自明ですよね。


2003|01|02|04|05|06|07|08|10|11|
2004|01|04|05|06|07|08|09|11|12|
2005|01|02|04|08|09|
2006|01|03|04|08|
2007|01|05|
2009|05|