400
Post/Edit Page
構造体のアラインメントがデフォルトで4byteないし8byteであるという妄想がどこから生まれたのかについて、後輩と語る。▼構造体のアラインメントは、構造体の各要素の中で最も厳しい制約を持つアラインメントに合わされる。つまり、16byteアラインメントの要素がひとつでもあれば16byteになるし、charしか持たない構造体であればアラインメントは1byteになる。即ち、char[5]を唯一の要素とする構造体のsizeは5である。8になったりはしない。▼勘違いは、intとcharを要素に持つ構造体のsizeが8であるところから生じているのではないかという話になった。これを誰かが、コンパイラが勝手に構造体のアラインメントを32bitデータバスに揃えるべく3byteのパディングを入れたと解釈したのではないかと言うのである。まあ、そんなところだろう。▼無論、この議論は様々な例外や詳細を切り捨てている。現代の標準的なバイトマシンに限った話と思ってもらえれば嬉しい。
pass:
Draft