aligned_alloc visibilty

faceless faceless at anonymous.mx
Sat Apr 12 03:22:06 UTC 2025


What is the purpose of hiding the `aligned_alloc` declaration 
like this in `core.stdc.stdlib`?
```d
  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:
```d
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
```


More information about the Digitalmars-d-learn mailing list