# Performance of loops (A caching question)

Consider below two C language functions to compute sum of elements in a 2D array. Ignoring the compiler optimizations, which of the two is better implementation of sum?

`// Function 1 ` `int` `fun1(` `int` `arr[R][C]) ` `{ ` ` ` `int` `sum = 0; ` ` ` `for` `(` `int` `i=0; i<R; i++) ` ` ` `for` `(` `int` `j=0; j<C; j++) ` ` ` `sum += arr[i][j]; ` `} ` ` ` `// Function 2 ` `int` `fun2(` `int` `arr[R][C]) ` `{ ` ` ` `int` `sum = 0; ` ` ` `for` `(` `int` `j=0; j<C; j++) ` ` ` `for` `(` `int` `i=0; i<R; i++) ` ` ` `sum += arr[i][j]; ` `} ` |

*chevron_right*

*filter_none*

In C/C++, elements are stored in Row-Major order. So the first implementation has better spatial locality (nearby memory locations are referenced in successive iterations). Therefore, first implementation should always be preferred for iterating multidimensional arrays.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

## Recommended Posts:

- Analysis of Algorithms | Set 4 (Analysis of Loops)
- A Time Complexity Question
- An interesting time complexity question
- Algorithm Practice Question for Beginners | Set 1
- Choose points from two ranges such that no point lies in both the ranges
- Count all Prime Length Palindromic Substrings
- Minimum operations of the given type required to make a complete graph
- Code Optimization Technique (logical AND and logical OR)
- Greatest divisor which divides all natural number in range [L, R]
- Find the repeating and the missing number using two equations
- Algorithms | Recurrences | Set 1
- Difference between Recursion and Iteration
- Largest perfect square number in an Array
- Maximum number of parallelograms that can be made using the given length of line segments