2012年8月10日 星期五

[C語言] memove,memcpy 差異

  平常工作都在用C ,C語言最好用但是也是最難用的就是記憶體的管理,如果用得好,可以減少記憶體的使用或是增加執行效能,但我常聽到一句話 "空間換時間",最近慢慢開始感受到這句的意思了。看一下memmove 與 memcpy這兩個 founction就會大概了解哩!!

-----------

[Founction]

void *memmove(void *dest, const void *src, size_t n);

void *memcpy(void *dest, const void *src, size_t n);


兩個都是可以複製記憶體空間
但最大的差異就在於


memmove : 可以同一個配置空間上複製;memcpy : 如在同一個配置空間複製則會出現 ERROR;

有人會想說 "當然是用功能限制少的阿!!!"
NoNoNo~~
這可是需要付出代價的
因為 使用 memove的速度 會慢很多~~~~~~~
memcpy 效率就快很多 因為他直接排除掉 在同一個空間複製的問題
(網路上也有查到原始碼 memmove 發現不是在同一空間複製時 會直接帶入memcpy的founction)

[原始碼]

在這也舉一個 讓人困擾的例子


[案例]
一個配置好的記憶體空間 裡面放滿字串
如果要在中間多加一段字串進來 該如何設計比較快呢
(如果都是一般字串String處理也行拉 暫時先不以這為主 因為也是有可能遇到 不能用的時候)


1.malloc一個足夠的大小 逐次的使用memcpy放入字串

2.重新將原本大空間realloc,以及malloc可以放後半段字串的空間, 使用memcpy直接加進去新字串,再把後半段memcpy回來


3.重新將原本大空間realloc,使用memmove將後半段字串往後移動,空出要加入的 字串空間,再memcpy進來新字串



呵呵 有空可以試看看 到底哪個速度會比較快...

如果你有更快的方法 拜託!!! 一定要告訴我喔!!!!!!!

2 則留言:

留言前請三思,禁止任何色情暴力等不當言語