RtlCopyMemory 與 RtlMoveMemory 的區別


首先需要看的是 MSDN 對於 CopyMemory 和 MoveMemory 的解釋:

CopyMemory:http://msdn.microsoft.com/en-us/windows/desktop/aa366535(v=vs.85).aspx

MoveMemory:http://msdn.microsoft.com/en-us/windows/desktop/aa366788(v=vs.85)



RtlCopyMemory和RtlMoveMemory都是內存複製。其區別是,RtlCopyMemory非重疊複製,而RtlMoveMemory是重疊複製,具體解釋如下:

   ABCD分別代表三段內存的起始地址和終止地址。如果需要將A到C段的內存複製到B到D段內存上,這是B到C段的內存就是重疊部分。RtlCopyMemory函數的內部實現方法是依靠memcpy函數實現的。根據C99定義,memcpy沒有考慮重疊的部分,因此他不能保證重疊部分是否被複制。爲了保證重疊部分也被正確複製,C99規定memmove函數完成這個任務。這個函數對兩個內存是否重疊進行了判斷,這種判斷卻犧牲了速度。

   如果程序員能確保複製的內存沒有重疊,請選擇使用memcpy。如果不能保證,請選擇使用memmove函數。爲了保證可移植性,DDK用宏對這兩個函數進行了封裝,即:RtlCopyMemory和RtlMoveMemory。


更多信息請參考:

Memory Management Functions
http://msdn.microsoft.com/en-us/windows/desktop/aa366781(v=vs.85)



注:本文轉載自:http://it2ech.diandian.com/post/2012-08-16/40035065131





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章