Some examples:
To support checking whether an object is of a subclass of a specific class in constant time, in a language using single inheritance, the compiler could arrange the vtables of classes in lexicographic order of the inheritance paths, and compare whether the vtable address is in a specific range. This may not work easily if multiple parts are independently compiled and linked together.
In graph related algorithms that one may need to get reversed edges frequently, one could make each pair of the odd and even numbered edges always the corresponding reversed edges in the data structure. In case it uses pointers instead of indexes to refer to the edges, it would be helpful if the address of the edge list always start at a fixed number mod (2 * size of element). It would be helpful if the language could provide a mechanism to allocate memory, but always start at a position satisfying such criteria. (Though it is possible to implement this in a library in C++, with a few bytes of waste due to the limitations of the operating system.)
I consider these ideas tricks that are unlikely to be formally the standard ways in a bigger system such as a language. But as they work, before dismissing these ideas completely, I'd like to know, are there existing language features or specific implementations taking advantage of the numeric nature of the addresses like in the examples?
I'm not asking about special values such as the null pointer. It's about the cases that the criteria of the address has caused data to not be placed in arbitrary memory location. And it's not about the cases limited to the defined order of data in a struct or array. It's for the cases that the allocation process is affected.