www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - aligned_alloc visibilty

reply faceless <faceless anonymous.mx> writes:
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
parent reply user1234 <user1234 12.de> writes:
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
parent faceless <faceless anonymous.mx> writes:
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