C語言memcpy函式的效率問題

2021-08-28 11:57:17 字數 1412 閱讀 5728

為了方便解釋,我們首先檢視memcpy的原始碼,版本:glibc-2.8 memcpy.c

#include #include #include #undef memcpy

void *

memcpy (dstpp, srcpp, len)

void *dstpp;

const void *srcpp;

size_t len;

/* there are just a few bytes to copy. use byte memory operations. */

byte_copy_fwd (dstp, srcp, len);

return dstpp;

}libc_hidden_builtin_def (memcpy)

為了方便理解我畫了簡單的流程圖供參考:

unsigned long int dstp = (long int) dstpp;

unsigned long int srcp = (long int) srcpp;

byte_copy_fwd (dstp, srcp, len);

return dstpp;

}

如果len >= op_t_thresop_t_thres在不同的系統或者平台有不同的值,通常為16或者8),那就按照if中的結構處理,否則執行byte_copy_fwd (dstp, srcp, len),即按按位元組拷貝

(1)首先記憶體對齊

len -= (-dstp) % opsiz;  

byte_copy_fwd (dstp, srcp, (-dstp) % opsiz);

首先使用位元組拷貝,使記憶體位址對齊,為虛擬記憶體頁拷貝做準備。

(2)按虛擬記憶體頁拷貝

page_copy_fwd_maybe (dstp, srcp, len, len);

加快記憶體拷貝的效率

(3)按8位元組拷貝

word_copy_fwd (dstp, srcp, len, len);

掃除剩餘的大塊位元組

(4)剩餘部分退出了if()語句,按照位元組拷貝,直至退出函式

C語言memcpy函式的用法

memcpy是memory copy的縮寫,意為記憶體複製,在寫c語言程式的時候,我們常常會用到它。它的函原型如下 void memcpy void dest,const void src,size t n 它的功能是從src的開始位置拷貝n個位元組的資料到dest。如果dest存在資料,將會被覆蓋...

C語言memcpy函式的用法

memcpy是memory copy的縮寫,意為記憶體複製,在寫c語言程式的時候,我們常常會用到它。它的函原型如下 void memcpy void dest,const void src,size t n 它的功能是從src的開始位置拷貝n個位元組的資料到dest。如果dest存在資料,將會被覆蓋...

C語言之memcpy函式

函式原型 void memcpy void dst,const void src,size t n 標頭檔案 include 函式說明 從源src所指的記憶體位址的起始位置開始拷貝n個位元組到dst所指的記憶體位址的起始位置中 引數 1 out dst 目的陣列的首位址 2 in src 源陣列的首...