首先需要看的是 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。
更多信息請參考:
注:本文轉載自:http://it2ech.diandian.com/post/2012-08-16/40035065131