digitalmars.D.learn - aligned_alloc visibilty
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
```
Apr 11
On Saturday, 12 April 2025 at 03:22:06 UTC, faceless wrote:
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
```
Maybe there's a `version (CRuntime_XXX)` missing for the C lib
you are using ? If so that looks like a druntime bug. But as
there's not that much libc implementation what is the one you are
on, Musl maybe ?
runtime library issues go here :
https://github.com/dlang/dmd/issues
Apr 12
On Saturday, 12 April 2025 at 15:32:05 UTC, user1234 wrote:Maybe there's a `version (CRuntime_XXX)` missing for the C lib you are using ? If so that looks like a druntime bug. But as there's not that much libc implementation what is the one you are on, Musl maybe ?Thanks for your response. I'm using DMD on plain, vanilla, out of the box, macOS.
Apr 12








faceless <faceless anonymous.mx>