Login | Register   
LinkedIn
Google+
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: Beginner
Aug 5, 2008

What Is the Smallest Object Size Possible in C/C++?

Q: What is the smallest object size possible in C/C++?

A: A first attempt to create a size 0 object may look like this:


  class Empty {};
However, the value of sizeof(Empty) will always be greater than zero (it is usually 1). This actually makes sense; otherwise it would be very difficult to perform normal pointer/array operations with such objects. For example, an array of objects with sizeof of zero would have the same size as each individual element. This is described in Bjarne Stroustrup's C++ Style and Technique FAQ (along with empty base class optimization) and in many other places, including C++ standards and compiler manuals.

Some C and C++ compilers allow named bit-field with zero width. However, this is a non-standard compiler extension. Also, the sizeof operator cannot be used to determine the size of a bit-field member.

One also might attempt to do something like this:


   std::cout << sizeof(void) << std::endl;
This is not possible either since void is a special object to which the sizeof operator cannot be applied. Again, it makes sense since no objects of type void can be created.

It is worthwhile to note that some C compilers allow an expression like printf("%d\n", sizeof(void));, but will print the value of one. Also, the following code will print zero when used with some old C compilers:


   struct EmptyStruct {};
   printf("%d\n", sizeof(EmptyStruct));
Again, these examples are compiler-specific and violate standards such as C99.

Thus, the smallest size of an object in C/C++ is one.

Alexander Ocher
 
Comment and Contribute

 

 

 

 

 


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

 

 

Sitemap