- UID
- 390967
- 帖子
- 1595
- 主題
- 822
- 精華
- 0
- 積分
- 854
- 楓幣
- 11017
- 威望
- 395
- 存款
- 10100
- 贊助金額
- 1800
- 推廣
- 0
- GP
- 2680
- 閱讀權限
- 150
- 在線時間
- 189 小時
- 註冊時間
- 2023-5-18
- 最後登入
- 2024-11-22
|
本帖最後由 whitefox 於 2023-5-29 13:02 編輯
memset
void * memset ( void * ptr, int value, size_t num );
ptr :為destination address 的pointer
value :想要set的值。(居然是type int. 表示是0~255(unsign char))
num :number of bytes
這表示一次只能set 1bytes,然後寫入num個。(這真是沒效率 囧...)
這邊說錯了, 要reset值的長度用sizeof(ptr)就好了... (05/04/2011)
memcpy
void * memcpy ( void * destination, const void * source, size_t num );
這ok,不過若source在copy時被overwrite時會是問題。
memmove
void * memmove ( void * destination, const void * source, size_t num );
memmove跟memcpy狠像,唯一的差別是在於它能保證source不會被overwrite。
另外關於w32api中mmap的使用可以參照這裡 ,另外也需要參考MSDN
1) 主要有三個步驟CreateFile(), CreateFileMapping()跟MapViewOfFile()
2) mapping的blocksize需為dwAllocationGranularity的倍數。
3) 主要是為了處理大檔(>=2**32, 2G以上),由於他的maxsize有Hi跟Low之分,要用
Hi = offset>>32, Low = offset & 0xffffffff 以轉成64bits.
4) MapViewOfFile Object 回傳ptr, 所以需要使用buffer來儲存欲處理的 data
------------------------------------
轉載 http://danjog.blogspot.com/2009/ ... memcpy-memmove.html |
|