IT用語集 › プログラミング › Structure of arrays (SoA)
構造体全体の配列ではなく、各フィールドをそれぞれ連続した配列(x[]、y[]、z[])に格納するメモリレイアウト。キャッシュ効率がよく、ベクトル化しやすい。
対になるのが「構造体の配列」(AoS)で、{x,y,z}[] のように各要素のフィールドが隣り合って並ぶ。SoAはこれを裏返し、x[]、y[]、z[] を別々の配列にする。全要素の1つのフィールドだけを触る場合、SoAは必要なキャッシュラインだけを読み、素直な配列はSIMDにもきれいにベクトル化できる。AoSでは、見もしないフィールドに帯域を浪費する。
{x,y,z}[]
x[]
y[]
z[]
これはデータ指向設計の土台であり、ECSライブラリがコンポーネントを格納する方法でもある。型ごとにスパースセットを使うことも多い。欠点は、1つの要素の全フィールドが必要なとき、読み出しが複数の配列に散らばることだ。