使用VirtualAllocAPI分配和提交具有两个页面边界大小的幂的虚拟内存区域时,例如:
void* address = VirtualAlloc(0, 0x10000, MEM_COMMIT, PAGE_READWRITE); // Get 64KB
Run Code Online (Sandbox Code Playgroud)
在address似乎永远在64KB对齐,而不仅仅是页面边界,这在我的情况是4KB。
问题是:这种一致性是可靠和明确的,还是偶然的? 文档指出,它保证在页面边界上,但是没有解决我所看到的问题。我问是因为稍后我想获取一个任意指针(由使用此块的池分配器提供),并通过类似于以下内容的方法确定它属于哪个64KB块:
void* chunk = (void*)((uintptr_t)ptr & 0xFFFF0000);
Run Code Online (Sandbox Code Playgroud)