c++ - Why do alignments greater than 128 act weird? -


so have been busy trying write own custom memory allocators, ran odd behaviour don't understand.

consider code:

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

this supposed take pointer , alignment requirement, , modify pointer aligned in forward (positive) direction.

however, when test out so:

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; 

the output this:

0 0 1280 1280 1248 

that doesn't seem right. should be:

1536 1280 1280 1280 1248 

what going wrong here?

your alignment parameter uint8_t. what's value of uint8_t(256)?


Comments