我在msdn上看到了这个例子:
http://msdn.microsoft.com/en-us/library/ms894209.aspx
DWORD dwResult;
MEMORY_BASIC_INFORMATION mbiMemory;
// Clear the results structure.
memset (&mbiMemory, 0, sizeof(MEMORY_BASIC_INFORMATION));
dwResult = VirtualQuery (lpPage, // Page to examine
&mbiMemory, // Structure for results
sizeof(MEMORY_BASIC_INFORMATION));
if (sizeof(MEMORY_BASIC_INFORMATION) != dwResult)
{
// Your error-handling code goes here.
}似乎他们使用memset作为向mbiMemory分配内存的一种方式。可以吗?我是不是会这样擦过一些内存?谢谢!
发布于 2011-05-19 19:02:14
不,它们不分配内存,它们只是重置结构以包含全零,以便它被初始化为某种已知状态,并且程序以可重现的方式运行。因为它们只覆盖结构(sizeof作为“字节数”传递),所以它们不会溢出任何东西。
发布于 2011-05-19 19:02:16
不是的。INFORMATION mbiMemory是一个automatic variable。它是一个结构,它是在堆栈上分配的。就像你写了int foo一样。
发布于 2011-05-19 19:02:33
内存在堆栈上的分配方式如下:
MEMORY_BASIC_INFORMATION mbiMemory;内存集正在清除已分配给零的内存。
https://stackoverflow.com/questions/6057596
复制相似问题