memset用于内存分配?

时间:2011-05-19 10:59:13

标签: c windows winapi memory 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.

}

似乎他们使用memset作为向mbiMemory分配内存的方法。好吗?我不会以这种方式跑过一些记忆吗?谢谢!

4 个答案:

答案 0 :(得分:6)

不,它们不分配内存,它们只是重置结构以包含所有零,以便将其初始化为某种已知状态,并且程序以可重现的方式运行。由于它们只覆盖该结构(sizeof作为“字节数”传递),因此它们不会溢出任何内容。

答案 1 :(得分:6)

惯用语编码将是这样的:

MEMORY_BASIC_INFORMATION mbiMemory = {0};

问题在于,当非专业C ++程序员阅读样本时,他们很可能无法理解该特定语法。 Raymond Chen wrote about this 最近在2005年

答案 2 :(得分:0)

没有。 INFORMATION mbiMemoryautomatic variable。它是一个结构,它被分配在堆栈上。就像你写了int foo一样。

答案 3 :(得分:0)

通过以下方式在堆栈上分配内存:

MEMORY_BASIC_INFORMATION mbiMemory;

memset正在清除已分配给零的内存。