Is there a way to portably determine the upper and lower bound on void-pointer values in ANSI C89/ISO C90? (I currently do not have a copy of the standard with me (I have one at home). Of course if void-pointer values are guaranteed to be unsigned this task is trivial (via sizeof(void *)); however, I cannot recall if this is guaranteed or not. I can think of a few very inefficient algorithms (increment until overflow, etc.), but I would like to know if anyone has a relatively cheap (in terms of time-complexity) and portable way to calculate these bounds.)
--EDIT--
Also: Is there a portable way to determine the validity of the pointer values?
Why: This came up in a discussion with a co-worker and it stumped me. I don't know what he's working on, but I just want to know because I am interested! :-)