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 <
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
", 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
", 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.