相关疑难解决方法(0)

VirtualAlloc对齐方式是否与分配大小一致?

使用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)

winapi virtual-memory

4
推荐指数
2
解决办法
2108
查看次数

标签 统计

virtual-memory ×1

winapi ×1