0 c memory windows winapi memset
我在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.
}
Run Code Online (Sandbox Code Playgroud)
看起来他们使用memset作为向mbiMemory分配内存的一种方式.好吗?我不会以这种方式跑过一些记忆吗?谢谢!
不,它们不分配内存,它们只是重置结构以包含所有零,以便将其初始化为某种已知状态,并且程序以可重现的方式运行.由于它们只覆盖该结构(sizeof作为"字节数"传递),因此它们不会溢出任何内容.
惯用编码将是这样的:
MEMORY_BASIC_INFORMATION mbiMemory = {0};
Run Code Online (Sandbox Code Playgroud)
问题在于,当非专业C++程序员阅读样本时,他们很可能无法理解该特定语法.雷蒙德陈写了关于这个 最近,早在2005年.