In this article we will learn how to calculate address of (i,j)th element of a matrix m*n in Column major order. Below is the explanation of it.
Column Major Order Formula
The Location/Address of element A[i, j] can be obtained by evaluating expression:
LOC (A [i, j]) = base_address + w * [m * j + i]
Here,
Base_Address = Address of the first element in the array.
w(Size of element)= Word size means a number of bytes occupied by each element of an Array. It depends on the data type, e.g., 4 bytes for an int
in many systems.
m = Number of rows in the array.
i = is the row index
j = is the column index
Here we have taken a 2-D array A [2, 4] which has 2 rows and 4 columns.
Explanation:
- Column Index Multiplied by Row Count: The term
(M * j)
finds the starting position of the jth column. Since it’s column-major, to get to the start of the jth column, we skipj
columns, each of which hasm
elements. - Row Index Addition: Adding the row index
i
moves down to the ith element in that column. - Scaling by Element Size: Multiplying by w(size of element) adjusts the address according to the actual memory size of each element in the matrix.
- Adding Base Address: Finally, adding the
Base_Address
of the matrix gives the absolute memory address of the elementA[i, j]
.
Problem to solve on Column Major Order
Now to calculate the base address of any index using column major order we can use process given below.
Consider a 4×3 (m=4, n=3) matrix stored in column-major order starting at base address 2000, and assume each element is an integer type taking 4 bytes. To find the address of the element in the second row and third column (A[1, 2]
):
It can be calculated as follow:
Here,
Given base_address = 2000, w(Size)= 4, m(number of rows)=4, i(row index)=1, j(column index)=2
LOC (A [i, j]) = base_address + W [m * j + i ]
LOC (A[1, 2]) = 2000 + 4 *[4 * 2 + 1]
= 2000 + 4 * [8 + 1]
= 2000 + 4 * 9
= 2000 + 36
= 2036