It does return a reliable value - just not always the value you expect. For example, if your structure contained:
And assuming a 1 byte char and 4 byte int, you do not get a result of "5" - the structure is padded so that elements start on their natural boundaries - you are more likely to get a result of "8".
Wiki explains this pretty well: http://en.wikipedia.org/wiki/Sizeof
] - at "Structure Padding", near the bottom.