[英]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.