09/01/12 00:40:28
パディングってむやみに入れるとキャッシュヒット率悪くなってかえって効率落ちたりしないんだろか
201:,,・´∀`・,,)っ-●◎○
09/01/12 00:42:04
逆にキャッシュラインを跨ぐと効率悪くなるんだよ
202:デフォルトの名無しさん
09/01/12 00:44:50
>>200-201
どっちも一般論だー
場合によるでしょ
203:デフォルトの名無しさん
09/01/12 00:58:25
実測すれば済む話
204:デフォルトの名無しさん
09/01/12 01:11:32
>>191
cygwin上のgccで試してみたけど、padding入らないよ
205:デフォルトの名無しさん
09/01/12 13:59:38
>>204
CPUによるが
struct foo {
char a;
double b;
};
でパディングが入らなかったら例外起きるだろうが。
206:デフォルトの名無しさん
09/01/12 14:41:55
起こんねーよ、CPUによるが。
207:デフォルトの名無しさん
09/01/12 14:55:43
struct {char a, b, c;}だったらパディングなくても例外起きないよ。
コンパイラがまともなら。
208:,,・´∀`・,,)っ-○◎●
09/01/12 17:32:33
アラインメント制約の厳しいプロセッサなら、例外が起きないようにコンパイラが勝手にパディングするんじゃないかな。
しかしミスアラインメントのデータに対するロード・ストアの扱いは各CPUアーキ毎に方針が違ってて面白いな
x86のSSE以降は、ミスアラインメントを許すが遅い命令と、許さないが高速な命令の2通りを用意。
対して、POWER/CellのSIMDは下位ビットを無視してロードし、プログラマが勝手にPermuteしてくれっていう扱い。
209:デフォルトの名無しさん
09/01/12 18:31:15
下位ビットを無視してくれるのはわざわざAND取ってアライメントする必要がないから楽でいいよな。
210:デフォルトの名無しさん
09/01/12 18:38:09
中を作る側もデコーダが軽くなるからウマー
211:デフォルトの名無しさん
09/01/13 01:17:59
>>205
> >>204
> CPUによるが
> struct foo {
> char a;
> double b;
> };
> でパディングが入らなかったら例外起きるだろうが。
なぜ勝手にdoubleが入ってるんだww
誰もそんな場合の話はしていない。
団子にこんな基本的なことで嘘つき呼ばわりされたが嘘じゃないってことで
>>185
> struct{char value;} array[0x100];
212:デフォルトの名無しさん
09/01/13 01:46:59
ところでパディングの入らない環境ってどんな環境だろ?
PC用で32bitプロセッサじゃ大抵入ると思うが。
sizeof(struct{char value;})==4
見たいにね。
213:デフォルトの名無しさん
09/01/13 02:10:47
struct{char value;} array[0x100];
printf("%d\n", sizeof(array));
=> 256
gcc-4.3.2ではこうなったけど、パディングってそもそも何だ?無効領域?
214:デフォルトの名無しさん
09/01/13 02:48:14
>>212
Crayだとchar=short=int=32bitとかが普通らしい。
PC用じゃないけど。
215:デフォルトの名無しさん
09/01/13 17:31:55
>>213
ゴメン
sizeof(struct{char value;})じゃ1だね。
sizeof(struct{char v1;short v2})じゃ4になったから試さずに
書いちゃった。メンバーが同じサイズなら配列化されるっぽいね。
216:デフォルトの名無しさん
09/01/13 19:04:45
1つの構造体中でサイズ違いのアクセスが発生するかどうかによって変わるのじゃない。
連続の同一単位アクセスだけなら必要ないし、むしろ最適化にも邪魔だと思うんだよね?
struct{char a;} arrayo[10];
struct{char a; char b;} arrayp[10];
struct{char a; char b; char c;} arrayq[10];
struct{char a; int b;} arrayr[10]; /* inserted */
struct{int a; char b;} arrays[10]; /* interted */
217:,,・´∀`・,,)っ-○◎●
09/01/13 21:09:54
俺的に配列は__declspec(align(32))がデフォです
218:デフォルトの名無しさん
09/01/13 21:34:41
32?
16じゃないのか?
219:,,・´∀`・,,)っ-○◎●
09/01/13 23:06:38
AVX化を視野に入れてるから
220:デフォルトの名無しさん
09/01/14 08:14:08
Alphaには16bitレジスタなかったよん