- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当使用 VirtualAlloc
API 分配和提交具有 2 次幂页面边界大小的虚拟内存区域时,例如:
void* address = VirtualAlloc(0, 0x10000, MEM_COMMIT, PAGE_READWRITE); // Get 64KB
address
似乎总是以 64KB 对齐,而不仅仅是页面边界,在我的例子中是 4KB。
void* chunk = (void*)((uintptr_t)ptr & 0xFFFF0000);
最佳答案
VirtualAlloc
的文档描述了 2 个场景的行为:1) 保留内存和 2) 提交内存:
If the memory is being reserved, the specified address is rounded down to the nearest multiple of the allocation granularity.
If the memory is already reserved and is being committed, the address is rounded down to the next page boundary.
GetSystemInfo
。
SYSTEM_INFO
结构的
dwPageSize
和
dwAllocationGranularity
将分别保存页面大小和分配粒度。
关于winapi - VirtualAlloc 对齐与分配大小一致吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20023446/
当使用 VirtualAlloc API 分配和提交具有 2 次幂页面边界大小的虚拟内存区域时,例如: void* address = VirtualAlloc(0, 0x10000, MEM_COM
我知道 C/C++ 风格的程序有内存部分、堆栈、堆、.text 等。但是当我使用 VirtualAlloc 时,它从哪里分配内存?我不认为它是堆,因为我可以只使用 HeapAlloc。 建议将不胜感激
virtualpointer=(char*) VirtualAlloc (NULL, (unsigned __int64) (1<<31), MEM_RESERVE, PAGE_READWRITE);
出于某种原因,当我的应用程序在某些配置的硬盘上运行时(RAID、随机分区、通过单独的 IDE Controller ,而不是在操作系统分区上),VirtualAlloc 返回 null 与 ERROR
我正在尝试使用 VirtualAlloc 来保留和提交一 block 内存,然后再次扩展该 block 。不幸的是,尽管 VirtualQuery 说请求的地址范围是免费的,但它返回 NULL 和错误
我正在为正在优化的 (Win7) C++ 例程编写回归测试,该例程以前释放并重新分配了许多巨大的缓冲区:内存流失。我想证明在测试期间,程序没有分配任何大内存区域(比如 16M 或更大),而是有效地重新
我试图从一个二进制文件中读取一些数据到一个用 VirtualAlloc 分配的缓冲区中。问题是我遇到了一个“糟糕的 Pr”问题并且无法执行 fread。这是我的代码: fseek(myfile,0,
VirtualAlloc 返回的内存块是否总是与页面大小对齐?换句话说,VirtualAlloc 的返回值和页面大小的模数总是为零吗? 最佳答案 嗯,是。 毕竟,你调用 VirtualAlloc 来分
在我的应用程序中,我试图在启动时通过 VirtualAlloc 分配一大块内存(大约 1GB-2GB),然后我可以稍后将其分割以供整个应用程序的其余部分使用。在 Debug模式下,我想在 Virtua
假设我使用 VirtualAlloc() 从 0x06000000 到 0x06010000 分配了几页连续内存(即 16 个 4KB 页),其中 PAGE_READWRITE保护。但过了一段时间,我
我正在使用 C# 开发应用程序 SFX/Protector,我希望 protected 程序集从字节数组执行,而不是将其写入硬盘,以便逆向工程更加困难。 我在一个字节数组中有一个程序(它有一个有效的入
我在使用 virtualalloc 时有一些奇怪的行为。我在使用 C++,Visual Studio 2010。 我有两件事要分配,我正在使用 VirtualAlloc(我有我的理由,与问题无关) 1
我正在将代码从 C++ 转换为我的 VB.NET 应用程序。这是 C++ 代码: typedef int (__stdcall *init_t)(uint32_t value,uint32_t pa
我想知道是否有比malloc/free低一级的跨平台分配器。 例如,我想要一些在 Linux 中简单地调用 sbrk 并在 Windows 中调用 VirtualAlloc 的东西(可能还有两个类似的
重要:在您在这里花费太多时间之前向下滚动到“最终更新”。事实证明,主要的教训是提防单元测试套件中其他测试的副作用,并始终在孤立地重现事物,然后再仓促下结论! 从表面上看,以下 64 位代码使用 Vir
我需要使用 VirtualAlloc/VirtualAllocEx 做什么? 举个例子,我发现的一个案例——如果我分配了 4 GB 的虚拟内存,那么如果我不使用所有虚拟内存,那么我就不会花费物理内存,
我想知道是否有可能确定一个虚拟地址(指针)是否属于以前的 VirtualAlloc 调用(如果可能的话不写入页面)。如果 VirtualFree 与 MEM_RELEASE 一起使用,它可以自动设置
在 VirtualFree 的 msdn 文档中 BOOL WINAPI VirtualFree( _In_ LPVOID lpAddress, _In_ SIZE_T dwSize, _
我需要使用 VirtualAlloc 为我的项目分配可执行内存,以便 JIT 将自定义脚本格式重新编译为 x86/etc。但我感到困惑的是,其他人似乎都没有注意到,而且它的行为似乎明显缺乏细节。 我知
我想调整由 MS 窗口的 VirtualAlloc 分配的内存区域的大小。查看 VirtualFree 文档,可以只部分取消提交一个区域,但不可能部分释放它。即可以释放部分物理内存,但不能释放部分虚拟
我是一名优秀的程序员,十分优秀!