我目前正在尝试在Windows中构建word2vec。但是posix_memalign()函数存在问题。每个人都建议使用_aligned_malloc(),但是参数的数量不同。那么Windows中posix_memalign()的最佳替代品是什么?

最佳答案

谢谢大家。根据我在某些存储库中喜欢的代码以及您的建议,我成功构建了EXE。这是我使用的代码:

#ifdef _WIN32
static int check_align(size_t align)
{
    for (size_t i = sizeof(void *); i != 0; i *= 2)
    if (align == i)
        return 0;
    return EINVAL;
}

int posix_memalign(void **ptr, size_t align, size_t size)
{
    if (check_align(align))
        return EINVAL;

    int saved_errno = errno;
    void *p = _aligned_malloc(size, align);
    if (p == NULL)
    {
        errno = saved_errno;
        return ENOMEM;
    }

    *ptr = p;
    return 0;
}
#endif

UPDATE :

看起来@alk建议针对此问题的最佳解决方案:
#define posix_memalign(p, a, s) (((*(p)) = _aligned_malloc((s), (a))), *(p) ?0 :errno)

关于c++ - Windows中posix_memalign的正确替代品是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33696092/

10-13 05:55