Browse DevX
Sign up for e-mail newsletters from DevX

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



Building the Right Environment to Support AI, Machine Learning and Deep Learning

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.



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