Efficient Array Copying

Suppose you want to assign the contents of a two-dimensional array to another two-dimensional array:

   int weekly_hours[5][5];  // source  int another_array[5][5];  // destination

You can use a nested loop to copy every element of weekly_hours to another_array, as in this example:

   for (int i = 0; i<5; i++)  {    for (int j = 0; j < 5; j++)    {      second_array[i][j] = weekly_hours[i][j];    }  }

This technique, however, is extremely inefficient. The code iterates through every element of the arrays, tests the conditions in the for-statements, and increments the counters. Fortunately, there is a much better way to do it. Both C and C++ guarantee that elements of multidimensional arrays occupy contiguous memory addresses. In other words, the memory layout of weekly_hours is identical to the memory layout of an array of 25 int's. You can take advantage of this fact and copy the entire multidimensional array to another multidimensional array, all at once. For this purpose, you use the standard function memcpy():

   memcpy(second_array, weekly_hours, sizeof(second_array)); 

memcpy() is declared in the C header file as follows:

   memcpy(void * destination, void * source, size_t bytes); 

On many platforms, memcpy() is written in highly-optimized assembly code. Therefore, the performance gain of using memcpy() instead of nested loops can be significant.

Share the Post:
Share on facebook
Share on twitter
Share on linkedin


Recent Articles: