Rik*_*rst 0 c++ memory pointers memory-alignment
所以我一直在忙着编写自己的自定义内存分配器,但是我遇到了一些我不理解的奇怪行为.
考虑以下代码:
void* PointerUtil::AlignForward(void* address, const uint8_t& alignment)
{
return (void*)(((uintptr_t)(address) + (uintptr_t)(alignment - 1)) & (uintptr_t)(~(alignment - 1)));
}
Run Code Online (Sandbox Code Playgroud)
这应该采用指针和对齐要求,并修改指针使其在正向(正向)上正确对齐.
但是,当我这样测试时:
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;
Run Code Online (Sandbox Code Playgroud)
我得到的输出是这样的:
0
0
1280
1280
1248
Run Code Online (Sandbox Code Playgroud)
这似乎不对.它应该是:
1536
1280
1280
1280
1248
Run Code Online (Sandbox Code Playgroud)
这里出了什么问题?