jjzjj

VirtualAlloc

全部标签

winapi - 用于虚拟内存管理的新 Windows 8.1 API : `DiscardVirtualMemory()` vs `VirtualAlloc()` and `MEM_RESET` and `MEM_RESET_UNDO`

Windows8.1/Server2012RC2刚刚引入了用于虚拟内存管理的新API:OfferVirtualMemory()、ReclaimVirtualMemory()、DiscardVirtualMemory()、它们的用法非常简单,只需查看它们的名称即可。我无法理解这些API如何针对VirtualAlloc()以及标志MEM_RESET和MEM_RESET_UNDO工作,以及什么是细微差别。对于OfferVirtualMemory(),MSDN说它与VirtualAlloc()+MEM_RESET非常相似,只是它从工作集,并限制对页面的进一步访问。所以,基本上它限制了对页面的访

c++ - Windows C 代码的内存分配

我想知道在WindowsC编程中推荐使用哪种方法:使用malloc或Win32HeapAlloc(也许是VirtualAlloc?)函数。我已阅读MSDNMemoryManagementFunctionsarticle和MSDN上关于malloc和HeapAlloc的文章,但他们没有说应该使用哪一个以及在什么情况下。 最佳答案 坚持使用malloc,除非你有令人信服的理由使用不同的东西。它将根据操作系统内存分配原语在底层实现,但您自己深入到该层并没有真正的优势。我认为一些API调用需要从Windows堆中分配内存块,但当您遇到它们时

c++ - 单个 VirtualAlloc 分配使用的内存(和其他资源)

单个VirtualAlloc(xxxx,yyy,MEM_RESERVE,zzz)使用了多少内存或其他资源?当我分配一个大块时,资源消耗(例如内核分页/非分页池)是否有任何差异,如下所示:VirtualAlloc(xxxx,1024*1024,MEM_RESERVE,PAGE_READWRITE)或多个较小的block,像这样:VirtualAlloc(xxxx,64*1024,MEM_RESERVE,PAGE_READWRITE);VirtualAlloc(xxxx+1*64*1024,64*1024,MEM_RESERVE,PAGE_READWRITE);VirtualAlloc(x

c++ - VirtualAlloc 的内存使用率高于预期;这是怎么回事?

重要:在您在这里花费太多时间之前向下滚动到“最终更新”。事实证明,主要的教训是提防单元测试套件中其他测试的副作用,并始终在孤立地重现事物,然后再仓促下结论!从表面上看,以下64位代码使用VirtualAlloc分配(和访问)一兆4k页面(共4GByte):constsize_tN=4;//TestswiththismanyGigabytesconstsize_tpagesize4k=4096;constsize_tnpages=(Npages(npages,0);for(size_ti=0;i(pages[i])=1;}//CheckallallocssucceededBOOST_CH

c++ - new[] 比 Win32 的 VirtualAlloc 快吗?

我正在测试一些字符串池分配器的性能:我考虑了提供的那个here调用VirtualAlloc然后分割出子分配,以及使用标准C++(不直接调用任何Win32API)和new[]的类似实现。我希望VirtualAlloc版本更快,因为我认为开销应该比C++new[]少;但我观察到的结果恰恰相反:使用new[]似乎比使用较低级别的VirtualAlloc产生更快的代码。我跑了几次测试(代码是用VS2010SP1编译的),输出是这样的:StringpoolusingVirtualAlloc:1280.07msStringpoolusingnew[]:799.193ms这是为什么?为什么new[]

php - WordPress Apache VirtualAlloc 和 VirtualFree 失败,PHP 内存不足

我正在尝试使用UniformServer自行托管一些网页WAMP包(Apache版本2.4.20,PHP版本7.0.8),其中一个是简单的Bootsrap投资组合,另一个是WordPress基于在线商店使用WooCommerce和其他插件。我的基于WordPress的站点有时会停止工作,直到我重新启动Apache服务。我发现主要的Apache日志充满了这些错误:VirtualAlloc()failed:[0x00000008]Notenoughstorageisavailabletoprocessthiscommand.VirtualFree()failed:[0x000001e7]A

c++ - 如何将文件内容复制到虚拟内存中?

我有一个小文件,我查看它并计算其中的字节数:while(fgetc(myFilePtr)!=EOF){numbdrOfBytes++;}现在我分配相同大小的虚拟内存:BYTE*myBuf=(BYTE*)VirtualAlloc(NULL,numbdrOfBytes,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);我现在想将文件的内容复制到nyBuf中。我该怎么做?谢谢! 最佳答案 大纲:FILE*f=fopen("myfile","r");fread(myBuf,numberOfBytes,1,f);这

c++ - VirtualAlloc 失败

我正在尝试使用VirtualAlloc来保留和提交一block内存,然后再次扩展该block。不幸的是,尽管VirtualQuery说请求的地址范围是免费的,但它返回NULL和错误ERROR_INVALID_ADDRESS。这是我的代码:void*allocation=VirtualAlloc(NULL,4096,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);void*desiredNextAllocation=(char*)allocation+4096;MEMORY_BASIC_INFORMATIONinfo;size_tmemory_info=Vi

c++ - 为什么我需要使用 VirtualAlloc/VirtualAllocEx?

我需要使用VirtualAlloc/VirtualAllocEx做什么?举个例子,我发现的一个案例——如果我分配了4GB的虚拟内存,那么如果我不使用所有虚拟内存,那么我就不会花费物理内存,如果我调整数组大小,我不需要做新的分配和复制旧数据到新数组。structT_custom_allocator;//whichusingVirtualAllocEx()std::vectorvec;vec.reserve(4*1024*1024*1024);//allocatedvirtualmemory(physicalmemoryisnotused)vec.resize(16384);//alloc

php - VirtualAlloc() 失败 : [0x00000008] Not enough storage is available to process this command

我已经遇到这个错误很长时间了,我的生产环境是在Windows2008R2企业平台上运行Apache2.4和php7。我的错误日志充满了这些行VirtualAlloc()失败:[0x00000008]存储空间不足,无法处理此命令。VirtualFree()失败:[0x000001e7]尝试访问无效地址一段时间后它会导致500错误,稍后我必须重新启动服务器它只能正常工作一段时间。请帮助我解决这些问题我已经尝试从php和wordpress端更新内存但仍然没有帮助 最佳答案 您的项目可能未在适当的架构上设置。您的PHP是32位的吗?检查PH