memcpy的速度測試

2021-08-04 10:04:49 字數 4062 閱讀 4300

想把一組char a[4096]的陣列拷貝到short b[6][256]中,嘗試過用迴圈移位的方式,還用中間變數short c[2048]的方式。得出的結論:

1. 移位方式效率最低

2. 借用中間變數,變數如果是區域性棧中,那麼速度比全域性的中間變數速度快,缺點是怕棧溢位。

驗證**如下:

//file name testcpyspeed.c

#include

#include

#include

#include

#define mtw_virtutalchnums (2)

#define mtw_phychnums (6)

#define mtw_maxchnums (mtw_virtutalchnums+mtw_phychnums)

#define mtw_samplesszie (256)

typedef short int16_t;

int16_t mic_data[mtw_phychnums][mtw_samplesszie] = ;

int16_t *mic[mtw_phychnums] = ;

//int16_t ref_fft[mtw_samplesszie] = ;

int16_t ref_fft[mtw_samplesszie] = ;

int16_t output[mtw_samplesszie] = ;

static int mmap_mwsrchannel(char *databuff,int len)

for( i = 0; i < 256; i++)

return0;}

void record_to_buff(char *buff,int len)

}int main(int argc,char *argv)

return

0;}

linjuntao@linjuntao:~/desktop/proctice/chartoshort$ cat teststos.c 

#include

#include

#include

#include

#define mtw_virtutalchnums (2)

#define mtw_phychnums (6)

#define mtw_maxchnums (mtw_virtutalchnums+mtw_phychnums)

#define mtw_samplesszie (256)

typedef

short int16_t;

int16_t mic_data[mtw_phychnums][mtw_samplesszie] = ;

int16_t *mic[mtw_phychnums] = ;

//int16_t ref_fft[mtw_samplesszie] = ;

int16_t ref_fft[mtw_samplesszie] = ;

int16_t output[mtw_samplesszie] = ;

static

int mmap_mwsrchannel(char *databuff,int len)

int16_t data[2048];

memcpy(data,databuff,4096);

for( i = 0; i < 256; i++)

return0;}

void record_to_buff(char *buff,int len)

}int main(int argc,char *argv)

return

0;}

linjuntao@linjuntao:~/desktop/proctice/chartoshort$ cat teststoglobals.c 

#include

#include

#include

#include

#define mtw_virtutalchnums (2)

#define mtw_phychnums (6)

#define mtw_maxchnums (mtw_virtutalchnums+mtw_phychnums)

#define mtw_samplesszie (256)

typedef

short int16_t;

int16_t mic_data[mtw_phychnums][mtw_samplesszie] = ;

int16_t *mic[mtw_phychnums] = ;

//int16_t ref_fft[mtw_samplesszie] = ;

int16_t ref_fft[mtw_samplesszie] = ;

int16_t output[mtw_samplesszie] = ;

int16_t data[2048];

static

int mmap_mwsrchannel(char *databuff,int len)

memcpy(data,databuff,4096);

for( i = 0; i < 256; i++)

return0;}

void record_to_buff(char *buff,int len)

}int main(int argc,char *argv)

return

0;}

//編譯:

cc testcpyspeed.c -o testor ;gcc teststos.c -o test16_16 ; gcc teststoglobals.c -o teststoglobals

//驗證:

linjuntao@linjuntao:~/desktop/proctice/chartoshort$ time ./testor 200000

real

0m1.999s

user 0m1.996s

sys 0m0.000s

linjuntao@linjuntao:~/desktop/proctice/chartoshort$ time ./test16_16 200000

real

0m1.661s

user 0m1.660s

sys 0m0.000s

linjuntao@linjuntao:~/desktop/proctice/chartoshort$ time ./teststoglobals 200000

real

0m1.658s

user 0m1.656s

sys 0m0.000s

linjuntao@linjuntao:~/desktop/proctice/chartoshort$ time ./test16_16 4000000

real

0m33.031s

user 0m33.028s

sys 0m0.000s

linjuntao@linjuntao:~/desktop/proctice/chartoshort$ time ./teststoglobals 4000000

real

0m33.157s

user 0m33.156s

sys 0m0.000s

linjuntao@linjuntao:~/desktop/proctice/chartoshort$ time ./testor 4000000

real

0m40.298s

user 0m40.292s

sys 0m0.004s

如果執行頻率比較高,還是使用區域性臨時變數拷貝比較快。

測試硬碟速度

hdparm t dev md0 br0ken7 2362833 2008 02 01 21 29 46 三塊盤做的raid0速度居然比四塊做的快 br0ken7 2362833 2008 02 01 21 29 57 hdparm t dev md0 dev md0 timing buffered...

速度測試 VBA EXCEL

需求 速度測試 vba excel 單元格選取 結論前置 使用的方法和物件越少越好,定位越精確,耗時越長 結論資料 塊 vbnet sub 速度測試 單元格選取 dim i as integer dim t as date dim t1 as string dim t2 as string t ti...

MySQL測試SQL執行的速度測試

引言 在mysql中如何測試單個sql的執行時間,是非常有助於我們理解其中的問題的,本文將介紹如何定位sql.的使用時間和執行計畫。1.檢視mysql關於profile的設定 show variables like pro 查驗mysql中profile的設定選項 上圖中的profiling標識著的...