On 6/14/16 10:04 PM, deadalnix wrote:
On Tuesday, 14 June 2016 at 23:19:12 UTC, Walter Bright wrote:
On 6/14/2016 3:38 PM, Guillaume Boucher wrote:
Isn't it guaranteed that x.sizeof >= x.alignof?  (At least it is in C
and C++.)
So the alignment should be of type size_t and not of type uintptr_t.

Also in general cast(uint)ptr%alignment is wrong since alignment does
not need
to be 32 bit.  However, cast(size_t)ptr%alignment is be correct in
any case.

There is no conceivable case where alignment will be > 32 bits, nor
not being a power of 2.

There are many cases in which alignment in 64bits.

There is nothing that says that x.sizeof >= x.alignof must be respected,
but really, if you don't respect that, you are simply wasting space and
cache without getting any benefit (the purpose of alignment is to avoid
store/load across cache lines).

I think you guys are missing the point.

I can check for 64-bit alignment by casting to ubyte:

((cast(ubyte)ptr) & 0x07) == 0

Walter: I don't see why the optimizer doesn't figure out the fastest way to do this, even with size_t. You are logic-anding a constant.

-Steve

Reply via email to