Memory management 在windows下,如何分配;写“合并”;内存块?

Memory management 在windows下,如何分配;写“合并”;内存块?,memory-management,Memory Management,主要动机:使用movntdqa汇编程序命令来避免堆栈污染。此命令仅适用于写组合内存(也称为WS和USWC)将PAGE_WRITECOMBINE传递给VirtualAllocEx()。对该页的顺序写入将由MMU合并写入。读取或非顺序写入将导致严重的性能损失。我尝试过:char*ans=(char*)VirtualAllocEx(hProcess,01024*1024*64,MEM_COMMIT,PAGE_READWRITE | PAGE_writecompine);当用PAGE_NOCACHE替换

主要动机:使用movntdqa汇编程序命令来避免堆栈污染。此命令仅适用于写组合内存(也称为WS和USWC)

将PAGE_WRITECOMBINE传递给VirtualAllocEx()。对该页的顺序写入将由MMU合并写入。读取或非顺序写入将导致严重的性能损失。

我尝试过:char*ans=(char*)VirtualAllocEx(hProcess,01024*1024*64,MEM_COMMIT,PAGE_READWRITE | PAGE_writecompine);当用PAGE_NOCACHE替换PAGE_WRITECOMBINE时,它总是返回0,GetLastError=87。它确实有效,而且内存访问非常慢。但是我需要写合并,这样movntdqa就可以像广告中那样工作了。尝试创建页面,然后在使用VirtualProtectEx()后更改其权限?也不起作用,下面的代码仍然返回87个未签名的long old;err=VirtualProtectEx(hProcess、ans、size、PAGE_READWRITE、PAGE_WRITECOMBINE和old);天哪,我被难住了。您的Windows内核版本似乎不知道写入组合内存,并拒绝了该参数(该错误代码为“无效参数”)。我使用XP Professional和SP3以及vista home edition进行了测试。