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
Post a Comment