日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ memcpy与strcpy的比较

發布時間:2023/12/4 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ memcpy与strcpy的比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1:區別
memcpy可以拷貝任何數據類型的對象,指定拷貝的數據長度。
strcpy只能拷貝字符串了,它遇到'\0'就結束拷貝
2:性能
static inline char *__kernel_strcpy(char *dest, const char *src)

  • {

  • char*xdest = dest;


  • asmvolatile("\n"

  • "1: move.b ?(%1)+,(%0)+\n"

  • " ? jne 1b"

  • :"+a"(dest),"+a"(src)

  • ::"memory");

  • return xdest;

  • }


  • static __always_inline void*__memcpy(void*to,constvoid*from, size_t n)

  • {

  • int d0, d1, d2;

  • asmvolatile("rep ; movsl\n\t"

  • "movl %4,%%ecx\n\t"

  • "andl $3,%%ecx\n\t"

  • "jz 1f\n\t"

  • "rep ; movsb\n\t"

  • "1:"

  • :"=&c"(d0),"=&D"(d1),"=&S"(d2)

  • :"0"(n /4),"g"(n),"1"((long)to),"2"((long)from)

  • :"memory");

  • return to;

  • }

  • memcpy()充分利用了機器字長為32位的特性(32位系統,一次內存讀/寫可操作4字節的數據, 對于64位系統,則一次可操作8字節數據)。先按4字節一組(movsl)拷貝,共復制n/4次;對剩下的零頭再逐字節拷貝。如果支持,memcpy()還可以使用了MMX/SSE指令增加一次操作中的字節數,進一步提高效率。
    3:健壯性
    拷貝的緩沖區如果是非字符串,盡量用memcpy(),其實字符串使用memcpy也是很好的選擇。你說的溢出可能是使用strcpy的\0結束問題或者是用memcpy指定的拷貝長度不對造成的。



    參考http://www.dewen.org/q/1469

    轉載于:https://blog.51cto.com/mumufairy/1213378

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的c++ memcpy与strcpy的比较的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。