簡體   English   中英

memset用於內存分配?

[英]memset used for memory allocation?

我在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的方法。 可以嗎 這樣我會不會耗盡一些內存? 謝謝!

不,他們不分配內存,他們只是將結構重置為包含所有零,以便將其初始化為某種已知狀態,並且程序以可重現的方式運行。 由於它們僅覆蓋該結構( sizeof作為“字節數”傳遞),因此它們不會覆蓋任何內容。

慣用編碼將如下所示:

MEMORY_BASIC_INFORMATION mbiMemory = {0};

這樣做的問題是,當非專業的C ++程序員閱讀示例時,他們很可能不會理解該特定語法。 雷蒙德陳寫了關於這個 最近 ,早在2005年。

否。 INFORMATION mbiMemory是一個自動變量 這是一個結構,並分配在堆棧上。 就像您編寫了int foo

內存是通過以下方式在堆棧上分配的:

MEMORY_BASIC_INFORMATION mbiMemory;

memset正在清除已分配為零的內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM