初期化で思う
現在未踏で作成しているアプリはC++でコーディングしている。
CやC++といったメモリ直にアクセスするタイプの言語だと、初期化の際にもメモリレイアウトが意識できてしまうので、意識してしまう。
例えば、3種類のバッファbuf_a, buf_b, buf_cがあったとして、それぞれの要素数をSIZE_A、SIZE_B、SIZE_Cとしておこう。
で、メモリアクセスの局所性を考えてこんな初期化をついついやってしまう。
buf_a = new float[SIZE_A + SIZE_B + SIZE_C];
buf_b = &buf_a[SIZE_A];
buf_c = &buf_b[SIZE_B];
要するに1回のnew (システムに対してメモリの確保を依頼する命令)で、複数のバッファの領域を一緒に確保しておいて、それぞれのポインタのアドレスには対応する領域の先頭アドレスを代入するという感じ。
これって確かにメモリアクセスの局所化という点では一理あるかも知れないけど、最適化コンパイラにとっては、かえって足かせになったりするかも??と思う。
ま、この例だけでなくて、CやC++のポインタは人間にも最適化コンパイラにも優しくない前時代の産物といわれているようですがね、、、
でも、なんとなく上記のような書き方をしてしまうなりよ
| 固定リンク
この記事へのコメントは終了しました。
コメント