Re: [問題] 關於memcpy的但書

看板C_and_CPP作者 (Analog Engineer)時間15年前 (2010/07/11 06:02), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《timemaker (不拉屎就離開茅坑)》之銘言: : 請問一下 : 假設memcpy的宣告如下: : void * memcpy ( void * destination, const void * source, size_t num ); : 則memcpy有兩個但書: : 1.To avoid overflows, : the size of the arrays pointed by both the destination and source parameters, : shall be at least num bytes, : 2.and should not overlap. : 第一個但書我們可以控制 : 但請問我們要如何確定第二個但書 : 也就是 : 如何確保這兩塊memory不會重疊到呢? : 謝謝 memcpy會影響到的記憶體區間是 dest..dest+len, 與src..src+len, 這段區間有沒有重疊 應該不難判斷. memmove功能上與memcpy一樣, 只是它會試情況決定從頭開始搬還是從尾巴開始搬. memcpy假如搬移重疊的位置會有資料覆蓋的問題, 但它也可能對你的程式而言不是問題, 如LZ77解壓縮演算法時的搬移. 從前往後搬時覆蓋位於後面的目的地並不會有問題. 從後往前搬時,若後面的資料被覆蓋, 資料就遺失了, 而memmove會改成從最後一個byte開始 逆著搬,這樣資料就不會遺失了. -- Do not depend on others without effort... 當我年輕時,請教別人問題時常聽到上面那句話. 當時心裏偶而會有些小小抱怨. 當時間過去,我偶而會想到上面那句話, 心中十分感謝當初告訴我那句話的人. 當發現問題時,最有價值的不是問題的答案, 而是找到解決的方向,並在努力的過程裡具備解決問題的能力. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.73.236.108

07/11 15:28, , 1F
倒著搬 會不會有prefetch錯的問題? 或是cache miss??
07/11 15:28, 1F

07/11 15:29, , 2F
小弟在這方面不是很清楚 有錯請指正
07/11 15:29, 2F

07/11 17:07, , 3F
當然會, 但是正著搬會錯, 只能倒著搬了.
07/11 17:07, 3F

07/11 17:17, , 4F
prefetch是什麼定義? and cache miss也不一定吧
07/11 17:17, 4F

07/11 17:17, , 5F
就算是alignment, compiler也會幫你對齊好
07/11 17:17, 5F
文章代碼(AID): #1CELvTUf (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1CELvTUf (C_and_CPP)