为什么大于 128 的对齐方式会表现得很奇怪

Why do alignments greater than 128 act weird?

本文关键字:方式会 大于 对齐 为什么      更新时间:2023-10-16

所以我一直在忙于编写自己的自定义内存分配器,但我遇到了一些我不理解的奇怪行为。

请考虑以下代码:

void* PointerUtil::AlignForward(void* address, const uint8_t& alignment)
{
    return (void*)(((uintptr_t)(address) + (uintptr_t)(alignment - 1)) & (uintptr_t)(~(alignment - 1)));
}

这应该采用指针和对齐要求,并修改指针,使其在正向(正)方向上正确对齐。

但是,当我像这样测试时:

int address = 1240;
std::cout << (uintptr_t)memory::PointerUtil::AlignForward((void*)((uintptr_t)address), 512) << std::endl;
std::cout << (uintptr_t)memory::PointerUtil::AlignForward((void*)((uintptr_t)address), 256) << std::endl;
std::cout << (uintptr_t)memory::PointerUtil::AlignForward((void*)((uintptr_t)address), 128) << std::endl;
std::cout << (uintptr_t)memory::PointerUtil::AlignForward((void*)((uintptr_t)address), 64) << std::endl;
std::cout << (uintptr_t)memory::PointerUtil::AlignForward((void*)((uintptr_t)address), 32) << std::endl;

我得到的输出是这样的:

0
0
1280
1280
1248

这似乎不对。它应该是:

1536
1280
1280
1280
1248

这里出了什么问题?

您的对齐参数为 uint8_tuint8_t(256)的价值是什么?