我注意到这种奇怪的效果,即内存在被触摸之前没有注册为由 Windows 任务管理器分配,而不是在malloc
-ed 或new
-ed 时。该效果同时出现在debug
和优化的release
版本中。
以下是一个结构示例,尽管在我的代码中分配和利用发生在不同的线程上,所以我不认为它是优化器,尽管我不确定如何检查。
for (int i = 0 ;i < 1000;i++)
{
buffer[i]=malloc(buffersize);
}
_sleep(1000*60)
for (int i=0;i<1000;i++)
{
memset(buffer[i],0,buffersize);//Only shows up the in the resource manager here
}
我的问题是 Windows 如何知道我使用了内存?是监视内存的首次使用还是一些编译时优化。
我的好奇心是由我正在编写的实时采集所激发的,它需要我触摸内存两次 -> 一次是在分配时,一次是在实际填充数据时。因此,按下一个按钮(“aquire!”)需要我一次写入 64 GB 的内存,而不是随着时间的推移,这会增加相当多的延迟。如果我malloc
这样做的话,这会增加太多的延迟。
- 编辑 -
我还禁用了 Windows 页面文件...