struct{
    Vector3* centers;
    float*  radii;
    float*  colors;
    unsigned int size;
}Spheres;




struct Sphere{
    Vector3 center;
    float  radius;
    float  color;
};

struct{
    struct Sphere* spheres;
    unsigned int size;
}Spheres;


使用范例

void spheres_process(){
    int i;
    for(i = 0; i < Spheres.size; ++i){
         // do something with this sphere
    }
}


我认为第二种情况具有更好的空间局部性,因为所有数据都是交织的,应该同时加载到缓存中。在这两种情况下,我将同时处理所有球体。有输入吗?

最佳答案

我是否建议同时尝试在cachegrind或其他某些缓存分析器下使用您的数据集?这可能比理论上的空间局部性更有效。根据代码的访问模式,您可能会得出一些令人惊讶的结果。

关于c - 哪种结构设计具有更好的空间局部性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4293513/

10-10 17:30