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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…