草庐IT

virtualalloc

全部标签

检查 VirtualAlloc 是否返回了 VirtualAddress

我想知道是否有可能确定一个虚拟地址(指针)是否属于以前的VirtualAlloc调用(如果可能的话不写入页面)。如果VirtualFree与MEM_RELEASE一起使用,它可以自动设置dwSize值。 最佳答案 是这样的还是我不明白这个问题?MEMORY_BASIC_INFORMATIONmbi;void*p=NULL;VirtualQuery(p,&mbi,sizeof(mbi));BOOLbWasUsed=(mbi.State==MEM_FREE)?FALSE:TRUE; 关于检查

c++ - 回归测试如何证明是否调用了 VirtualAlloc?

我正在为正在优化的(Win7)C++例程编写回归测试,该例程以前释放并重新分配了许多巨大的缓冲区:内存流失。我想证明在测试期间,程序没有分配任何大内存区域(比如16M或更大),而是有效地重新使用在初始化时分配的内存。归根结底,如果调用VirtualAlloc来获取某个大区域(比如16M),测试应该会失败。是否有一种优雅的方法来计算对WindowsVirtualAlloc调用的统计信息?这将成为永久自动回归测试套件的一部分,因此使用外部工具或修改下游代码是不可行的。检查提交的总内存不太适合,因为我想断言例程不再搅动(释放和重新分配缓冲区。) 最佳答案

windows - 为什么当 flAllocationType = MEM_RESERVE 时 VirtualAlloc() 需要 flProtect = PAGE_NOACCESS?

以下对VirtualAlloc()的调用在x64上返回错误ERROR_INVALID_PARAMETER:LPVOIDlp=VirtualAlloc(NULL,0x10000000000,MEM_RESERVE,0);也就是说,我必须使用PAGE_NOACCESS作为VirtualAlloc的最后一个参数。但是当我查看PAGE_NOACCESShere的定义时,我发现:Disablesallaccesstothecommittedregionofpages.Anattempttoreadfrom,writeto,orexecutethecommittedregionresultsina

c++ - CopyMemory 复制比 VirtualAlloc 分配更多的字节怎么办

请看这段代码,在我的机器上,它不会引发错误,但我不明白为什么我可以复制比VirtualAlloc分配的更多的字节,这个操作安全吗?PBYTEpNewBuffer=(PBYTE)VirtualAlloc(NULL,3,MEM_COMMIT,PAGE_READWRITE);BYTEFlagThree[]={'a','b','c','d','e','f','g'};CopyMemory(pNewBuffer,FlagThree,sizeof(FlagThree));我分配了3个字节,但复制到内存7个字节。 最佳答案 这不是未定义的行为。事

windows - 关于内存页保护的问题

这是我在阅读时遇到的另一个问题。首先,让我们看一些引文。LPVOIDWINAPIVirtualAlloc(__in_optLPVOIDlpAddress,__inSIZE_TdwSize,__inDWORDfdwAllocationType,__inDWORDfdwProtect);Thelastparameter,fdwProtect,indicatestheprotectionattributethatshouldbeassignedtotheregion.Theprotectionattributeassociatedwiththeregionhasnoeffectontheco

c++ - 如何获取在对 VirtualAlloc 的初始分配调用中保留的区域大小

在VirtualFree的msdn文档中BOOLWINAPIVirtualFree(_In_LPVOIDlpAddress,_In_SIZE_TdwSize,_In_DWORDdwFreeType);dwSize[输入]要释放的内存区域的大小,以字节为单位。如果dwFreeType参数是MEM_RELEASE,这个参数必须是0(零)。该函数释放在对VirtualAlloc的初始分配调用中保留的整个区域。好像系统可以通过地址获取整个区域的大小我的问题是:我该怎么做(通过地址获取整个区域大小)PS:VirtualQueryAPI不能那样做void*p=VirtualAlloc(null,s

c - VirtualAlloc 为批量文件读取分配内存的问题

我试图从一个二进制文件中读取一些数据到一个用VirtualAlloc分配的缓冲区中。问题是我遇到了一个“糟糕的Pr”问题并且无法执行fread。这是我的代码:fseek(myfile,0,SEEK_END);DWORDFileSize=ftell(myfile);fseek(myfile,0,SEEK_SET);BYTE*buf=(BYTE*)VirtualAlloc(NULL,FileSize,MEM_RESERVE,PAGE_EXECUTE_READWRITE);fread(buf,sizeof(BYTE),1,myfile);恐惧-失败了。我做错了什么?谢谢!

windows - 尽管 WinMobile 上有大量物理内存,但 VirtualAlloc 怎么会失败(没有内存)?

我经常看到VirtualAlloc调用保留内存失败。我请求2MB,以便分配不计入我的每个进程虚拟内存,而是使用系统共享内存。发生故障时,系统报告物理内存中有超过100MB可用。我在WindowsMobile6.1设备上运行。到目前为止,这是一个特定于设备的问题。它适用于许多相同的设备并在一台设备上失败。我希望能够确定此设备上的其他进程是否正在保留共享内存并因此阻止我这样做。虽然不确定我该怎么做。这是我依赖的文档,我看不到任何可以解释这个问题的内容:http://msdn.microsoft.com/en-us/library/aa908768.aspx有什么想法吗?谢谢。

c++ - 何时使用 VirtualAlloc 与 new?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:What'sthedifferencesbetweenVirtualAllocandHeapAlloc?我想预分配一大块内存,比如1gb来实现内存池。VirtualAlloc使用4kb的页面大小进行分配。在这种情况下使用virtualalloc相对于new有什么优势?这种情况下不应使用new还是使用new而不是虚拟分配有任何缺点?

c++ - VirtualAlloc 的困惑 - 它只适用于页面吗?

我需要使用VirtualAlloc为我的项目分配可执行内存,以便JIT将自定义脚本格式重新编译为x86/etc。但我感到困惑的是,其他人似乎都没有注意到,而且它的行为似乎明显缺乏细节。我知道它分配“虚拟”内存,这意味着它可以是物理上的任何东西(RAM/磁盘),但在使用时它可以简单地被视为“内存”。但是,例如,如果我做类似的事情:#defineMB1024*1024autopAddr=VirtualAlloc(NULL,8*MB,MEM_RESERVE,PAGE_NOACCESS);VirtualAlloc(pAddr+4*MB,1*MB,MEM_COMMIT,PAGE_EXECUTE_