What is the purpose of hiding the aligned_alloc
declaration like this in core.stdc.stdlib
?
29 version (CRuntime_Glibc)
30 version = AlignedAllocSupported;
31 else version (CRuntime_Newlib)
32 version = AlignedAllocSupported;
33 else {}
...
184 /// since C11
185 version (AlignedAllocSupported)
186 {
187 void* aligned_alloc(size_t alignment, size_t size);
188 }
—— my system is definitely not CRuntime_Glibc
or CRuntime_Newlib
as shown by the output of the following example:
import core.stdc.stdlib : malloc, free, aligned_alloc;
// extern(C) void* aligned_alloc(size_t alignment, size_t size); // uncomment to compile
import core.stdc.stdio:printf;
void main()
{
int* p1;
p1 = cast(int*)malloc(10* p1.sizeof);
printf("default-aligned addr: %p\n", cast(void*)p1);
free(p1);
int* p2;
p2 = cast(int*)aligned_alloc(1024, 1024* p2.sizeof);
printf("1024-byte aligned addr: %p\n", cast(void*)p2);
free(p2);
}
—— output:
aligned.d(1): Error: module `core.stdc.stdlib` import `aligned_alloc` not found
import core.stdc.stdlib : aligned_alloc;
^
—— but it compiles fine when compiled with -version=AlignedAllocSupported
or if I declare the aligned_alloc
myself. Here is the output of the above example with the -version
flag set on my system:
default-aligned addr: 0x600002d08050
1024-byte aligned addr: 0x7fafb380e800