Consider the following two C code segments. $Y$ and $X$ are one and two dimensional arrays of size $n$ and $ n \times n$ respectively, where $2 \leq n \leq 10$. Assume that in both code segments, elements of $Y$ are initialized to 0 and each element $X[i][j]$ of array $X$ is initialized to $i+j$. Further assume that when stored in main memory all elements of $X$ are in same main memory page frame.
Code segment 1:
// initialize elements of Y to 0
// initialize elements of X[i][j] of X to i+j
for (i=0; i<n; i++)
Y[i] += X[0][i];
Code segment 2:
// initialize elements of Y to 0
// initialize elements of X[i][j] of X to i+j
for (i=0; i<n; i++)
Y[i] += X[i][0];
Which of the following statements is/are correct?
S1: Final contents of array $Y$ will be same in both code segments
S2: Elements of array $X$ accessed inside the for loop shown in code segment 1 are contiguous in main memory
S3: Elements of array $X$ accessed inside the for loop shown in code segment 2 are contiguous in main memory
- Only S2 is correct
- Only S3 is correct
- Only S1 and S2 are correct
- Only S1 and S3 are correct