嵌入式100題(024):重寫memcpy()函數需要注意哪些問題


重寫memcpy()函數需要注意哪些問題

  標准memcpy()的解釋:

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

  //If copying takes place between objects that overlap, the behavior is undefined.

  注意下面的注釋,對於地址重疊的情況,該函數的行為是未定義的。

  事實上所說的陷阱也在於此,自己動手實現memcpy()時就需要考慮地址重疊的情況。

  另外,標准庫也提供了地址重疊時的內存拷貝函數:memmove(),那么為什么還要考慮重寫memcpy()函數呢?

  因為memmove()函數的實現效率問題,該函數把源字符串拷貝到臨時buf里,然后再從臨時buf里寫到目的地址,增加了一次不必要的開銷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM