java - 在遍历简单的二维数组时提高缓存性能?

标签 java c caching

我一直在想办法重写下面的代码以提高数组中的缓存性能(通过减少缓存中的未命中)。

我知道数组是逐行(顺序)存储在内存中的,所以 ary[0][0], ary[0][1], ary[0][2],....ary [1][0], ary[1][1], ary[1][2]... ary[50][0], ary[50][1]...ary[50][50] .但是,我不确定如何使用此信息来帮助我弄清楚如何修改循环以提高缓存性能。

for (c = 0; c < 50; c++)
    for (d = 0; d < 50; d++)
        ary[d][c] = ary[d][c] + 1;

最佳答案

如果你想一次访问一行的所有单元格,只需反转两个循环:

for (d = 0; d < 50; d++)
    for (c = 0; c < 50; c++)
        ary[d][c] = ary[d][c] + 1;

甚至

for (d = 0; d < 50; d++)
    int[] array = ary[d];
    for (c = 0; c < 50; c++)
        array[c] = array[c] + 1;

但我怀疑它有任何重大影响,甚至根本没有任何影响,尤其是在如此小的阵列上。使您的代码简单易读。不要预先优化。

关于java - 在遍历简单的二维数组时提高缓存性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593453/

相关文章:

http - 通过 Nginx 无限期缓存 HTTP 响应失败

java - Spring Boot 忽略来自外部 application.properties 的日志记录级别

java - 无法写入文件

java - UnsatisfiedDependencyException Swagger2 + Sringboot + @RestClientTest

c# - 用于 C、C# 或 Java 的 OSX/Windows GUI 构建器的库和/或程序选项

c - 为什么对于具有指定长度的数组,C 中的文字字符串赋值是不可能的?

c - 用于检入 C 的单链表显示

c - int x = 3. x 会在缓存中吗?

由于 csrf token 未存储 django + varnish 缓存

java - 如何使用Struts编程打印数据库中的数据并显示在ftl页面上