Allocating byte aligned array

Ali Çehreli acehreli at yahoo.com
Wed Sep 27 21:44:48 UTC 2017


On 09/27/2017 02:39 PM, timvol wrote:
> Hi guys,
> how can I allocate an (e.g. 16) byte aligned array?
> In C I can do the following:
>
>     void *mem = malloc(1024+15);
>     void *ptr = ((uintptr_t)mem+15) & ~ (uintptr_t)0x0F;
>     memset_16aligned(ptr, 0, 1024);
>     free(mem);
>
> I think in D it looks similar to this:
>
>     auto mem = new ubyte[1024+15];
>     auto ptr = (mem.ptr + 15) & ~ (...???...) 0x0F;
>
> How to fill ...???... ?
> Without a cast, the compiler tells me that I the types are incompatible
> (ubyte* and int).
>
> What's the correct syntax here?
>
> PS: I don't want to use the experimental branch that provides
> alignedAllocate().

void main() {
     auto mem = new ubyte[1024+15];
     auto ptr = cast(ubyte*)(cast(ulong)(mem.ptr + 15) & ~0x0FUL);
     auto arr = ptr[0..1024];
}

Ali



More information about the Digitalmars-d-learn mailing list