Login | Register   
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: All
Aug 20, 1999

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 <string.h> 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.

Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap