Thread overview
aligned_alloc visibilty
Apr 12
faceless
6 days ago
user1234
6 days ago
faceless
April 12

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
6 days ago

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?

 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

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

6 days ago

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.