gpt4 book ai didi

c++ - 对齐指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:36 28 4
gpt4 key购买 nike

我想对齐指针 p 以便 p = a (modulo b)。大多数时候,a = 0 和 b = 32 或 64 用于 SIMD 对齐,但当我想微调缓存关联性算法时,我可能还需要 a = 64 和 b = 128。

  • std::align 不接受任何 2 的幂来对齐。它将在 C++17 中修复,但现在没有用
  • __mm_malloc/__free 没有我想要的那么便携

到目前为止,我最好的解决方案是将指针转换为 std::uintptr_t 并对整数使用模运算来移动指针。不幸的是,它不可移植,因为“不允许”将指针转换到 std::uintptr_t。但它适用于我迄今为止尝试过的所有平台。

这样的代码会在什么样的平台上破解?

最佳答案

您可能正在寻找这样的东西:

inline size_t AlignHi(size_t size, size_t align)
{
return (size + align - 1) & ~(align - 1);
}

inline void * Allocate(size_t size, size_t align)
{
#if defined(_MSC_VER)
return _aligned_malloc(size, align);
#elif defined(__GNUC__)
align = AlignHi(align, sizeof(void*));
size = AlignHi(size, align);
void * ptr;
int result = ::posix_memalign(&ptr, align, size);
return result ? NULL : ptr;
#else
return malloc(size);
#endif
}

inline void Free(void * p)
{
#if defined(_MSC_VER)
_aligned_free(p);
#else
free(p);
#endif
}

关于c++ - 对齐指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35081546/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com