The array should be allocated with 300 rows. Each row of the 2D array should occupy one page of memory, so the number of columns depends on the page size:
#include <unistd.h> #include <stdlib.h> ... int main( void) { int nrows = 300, PAGESIZE = sysconf(_SC_PAGESIZE), ncols = PAGESIZE/sizeof(int); int *a = calloc( nrows*ncols, sizeof(int));Note that a dynamically allocated 2D array is stored as a 1D array, so
a[row][col]
is really a[row*ncols+col]
Measure the time in msec that it takes to perform 100 iterations of each of the following accesses:
// by rows // for( int row = 0; row < nrows; ++row) for( int col = 0; col < ncols; ++col) a[row*ncols+col] += 1;and:
// by cols // for( int col = 0; col < ncols; ++col) for( int row = 0; row < nrows; ++row) a[row*ncols+col] += 1;Include the program output in a comment at the end of the code.
References: sysconf(), calloc(), msec(); getconf
Programs must compile with no warnings or errors using: gcc -Wall
Each source file must start with a comment containing your name and a description.