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

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


Tip of the Day
Home » Tip Bank » C++
Language: C++
Expertise: All
Dec 10, 1999

WEBINAR:

On-Demand

Application Security Testing: An Integral Part of DevOps


Assigning a Zero Value to All Members of a Struct

Sometimes you need to clear all the members of a struct after it was used. With large structs, you usually use memset() for that purpose. However, for smaller structs that occupy 2, 4 or 8 bytes of memory, calling memset() is rather expensive in terms of performance:
 
  struct Date
  {
    char day;
    char month;
    short year;
  }; // Date occupies 4 bytes

  Date d;
  d.day = 13; d.month = 4; d.year = 2000; // use d
  memset(&d, 0, sizeof (d)); // now clear it
You can avoid the overhead of calling memset() by using the following technique instead:
 
    // convert a pointer to d to a pointer to int
  int * pfake = reinterpret_cast <int*> (&d); // 1
    // assigns all d's members to zero through fake ptr
  *pfake = 0; // 2
The first line of code creates a pointer to int (assuming 32-bit int size) that actually points to a Date object, d. Of course, cheating is necessary to convince the compiler to accept this conversion. This is why reinterpret_cast is used. The second line dereferences that fake int pointer and writes the value 0 to its memory block. This ensures that all the bits in d are set to zero.

You can perform this two-step operation in a single statement like this:

 
  *( reinterpret_cast <int*> (&d) ) = 0;
However, this is less readable and more error prone.
Danny Kalev
 
Comment and Contribute

 

 

 

 

 


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

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date