看板 C_and_CPP 關於我們 聯絡資訊
請問一下 假設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不會重疊到呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.167.196 ※ 編輯: timemaker 來自: 59.112.167.196 (07/10 09:10)
keyword1983:不要用同一塊malloc出來的記憶體 07/10 09:34
keyword1983:也不要用同一塊宣告好的array等空間 07/10 09:35
keyword1983:我覺得它只是想表達這樣的限制 07/10 09:35
keyword1983:基本上 你不論是宣告或是new,OS不會給你重疊的區域 07/10 09:36
keyword1983:上面說的是 dest 跟 src 兩個參數不要用同一個空間 07/10 09:37
loveme00835:確保 destination + num <= source 或是 source + num 07/10 09:37
loveme00835:<= destination 07/10 09:38
softwind:memmove will be better. 07/10 09:38
loveme00835:↑因為 memmove 多了暫存區. 07/10 09:43
softwind:去google code search 拉 libc\memcpy和memmove 來看沒差 07/10 10:20
softwind:如果要tune performance,mov mem之後base reg, 可以選擇 07/10 10:21
softwind:遞增遞減, 無論是 x84 or ARM 的 assembly 都有支援 07/10 10:22
loveme00835:規格書中沒寫 memcpy 要不要用暫存區, 實作各異 07/10 10:25
ckclark:memmove我記得是會判斷兩塊記憶體先後來決定copy的順序 07/10 14:30
ckclark:如果dest比較後面src就先從後面address開始 反之從前面 07/10 14:31
clanguage:memmove 效能會打折, 畢竟一般情況不太會重疊 07/10 20:23