Search code examples
csizeof

How to find the size of a variable without using sizeof


Let us assume I have declared the variable 'i' of certain datatype (might be int, char, float or double) ...

NOTE: Simply consider that 'i' is declared and dont bother if it is an int or char or float or double datatype. Since I want a generic solution I am simply mentioning that variable 'i' can be of any one of the datatypes namely int, char, float or double.

Now can I find the size of the variable 'i' without sizeof operator?


Solution

  • You can use the following macro, taken from here:

    #define sizeof_var( var ) ((size_t)(&(var)+1)-(size_t)(&(var))) 
    

    The idea is to use pointer arithmetic ((&(var)+1)) to determine the offset of the variable, and then subtract the original address of the variable, yielding its size. For example, if you have an int16_t i variable located at 0x0002, you would be subtracting 0x0002 from 0x0006, thereby obtaining 0x4 or 4 bytes.

    However, I don't really see a valid reason not to use sizeof, but I'm sure you must have one.