冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 861|回覆: 0
打印 上一主題 下一主題

[心得] [C] memory 相關的函式(memset, memcpy, memmove) - 轉載

[複製鏈接]

822

主題

0

好友

854

積分

高級贊助會員

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

UID
390967
帖子
1595
主題
822
精華
0
積分
854
楓幣
11017
威望
395
存款
10100
贊助金額
1800
推廣
0
GP
2680
閱讀權限
150
在線時間
189 小時
註冊時間
2023-5-18
最後登入
2024-11-22

2023年紀念勳章 太陽勳章 神手勳章 高級客戶 VIP會員 私服達人 懶人勳章 幼兒勳章 音樂勳章 屁孩勳章 貢獻王 性別(女) 性別(男) 積分勳章 發帖達人 2023端午節紀念勳章 富豪勳章 富可敵國 2023中秋節紀念勳章 解說達人 論壇粉絲 2023聖誕節紀念勳章 2024年紀念勳章 2024端午節紀念勳章 2024中秋節紀念勳章

跳轉到指定樓層
1
發表於 2023-5-28 15:15:08 |只看該作者 |倒序瀏覽
本帖最後由 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
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1彩票
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-11-22 12:12

回頂部