But using it is a little bit slow comparing to exception, and I am curious to find out how Sysutils handle system exception.
I haven't benchmarked the various ways of determining the invalidity of a pointer but, generally speaking, using exceptions will likely be the slowest method because in addition to requiring a ring transition, it also requires going through a list of handlers to find the one, if any, that is willing to deal with the exception.
Personally, I'd use IsBad(Read/Write)Ptr and let the O/S handle the exception internally and return a simple boolean indicating the validity of the pointer.