Validity of cast(void*)size_t.max

Steven Schveighoffer schveiguy at yahoo.com
Fri Mar 2 20:44:06 UTC 2018


On 3/2/18 3:26 PM, Nordlöw wrote:
> On Wednesday, 28 February 2018 at 20:07:50 UTC, Steven Schveighoffer wrote:
>> auto x = cast(Object)((cast(size_t *)null) + 1);
> 
> Is this preferred performance-wise over `cast(void*)(size_t.max)`?

No, it just works, as opposed to, um... not working ;)

I think the compiler senses you are trying to do something foolish (even 
though that's not the case), and prevents you from doing it. For some 
reason it doesn't care about it if it starts out as a pointer.

If both worked, or even cast(void *)(size_t.sizeof) worked, then the 
performance would be the same, as you are casting a constant.

What you are looking for is a sentinel to check against. Either works 
OK. As I said before, items in the zero page are not going to be mapped 
by the OS. I'm not sure about size_t.max.

-Steve


More information about the Digitalmars-d-learn mailing list