Re: [問題] 請問一下關於ZeroMemory的用法

看板C_and_CPP (C/C++)作者 (...)時間16年前 (2009/04/09 19:00), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/5 (看更多)
千萬不要拿來這樣子做... 在 winbase.h 裡,你可以找到這一行 #define ZeroMemory RtlZeroMemory 其實它是呼叫 ntdll 中的 RtlZeroMemory 那我們看一下 RtlZeroMemory 在幹麼 7C922C64 > 57 push edi 7C922C65 8B7C24 08 mov edi, dword ptr [esp+8] 7C922C69 8B4C24 0C mov ecx, dword ptr [esp+C] 7C922C6D 33C0 xor eax, eax 7C922C6F FC cld 7C922C70 8BD1 mov edx, ecx 7C922C72 83E2 03 and edx, 3 7C922C75 C1E9 02 shr ecx, 2 7C922C78 F3:AB rep stos dword ptr es:[edi] 7C922C7A 0BCA or ecx, edx 7C922C7C 75 04 jnz short 7C922C82 7C922C7E 5F pop edi 7C922C7F C2 0800 retn 8 7C922C82 F3:AA rep stos byte ptr es:[edi] 7C922C84 5F pop edi 7C922C85 C2 0800 retn 8 簡單的說,就是如 MSDN 所說的 RtlZeroMemory(void *dest, size_t len) 從 *dest 指到的位置開始,置 len bytes 個 0 (單位是 byte) 所以你丟 iterator 給它的話,會死的很難看 不過 ZeroMemory 通常會被 compiler 最佳化掉 所以最後其實不會 call 到 RtlZeroMemory 去 講這麼多,其實 ZeroMemory(ptr, 5) = memset(ptr, 0, 5) 吧 有錯請指正 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.186.147 ※ 編輯: ewn 來自: 114.44.186.147 (04/09 19:06)
文章代碼(AID): #19tTL9cs (C_and_CPP)
文章代碼(AID): #19tTL9cs (C_and_CPP)