上に戻る
1       /************************************************************************/
2       /*******	2章.	register char counterは遅い		*********/
3       /*******							*********/
4       /*******				初版	NEC通信システム	*********/			
5       /************************************************************************/
6       #include	"common.h"
7       /*------------------------------------------*/
8       /*  2.1 処理速度が遅過ぎる  memset	    */
9       /*------------------------------------------*/
10      static	void	tooSlowMemset(
11      	register char	*s,
12      	register char	c,
13      	register char	n)
14      {
15      	register char	counter ;
16      	for(counter = 0 ; counter < n ; counter = counter + 1) {

/* 1/ 3 警告01/01: A:e161: 配列【charは遅く128以上参照不能】 を 配列【intで宣言した変数】にできませんか:[counter] %%%*/

17 s[counter] = c ;

18 } 19 } 上に戻る 20 /*------------------------------------------*/ 21 /* 2.2 伝統職人が好んだ, memset */ 22 /*------------------------------------------*/ 23 static void traditionalMemset(char *s,int c,int n) 24 { 25 while(n--) { 26 *s++ = c ; 27 } 28 } 上に戻る 29 /*------------------------------------------*/ 30 /* 2.3 普通の人が書く memset */ 31 /*------------------------------------------*/ 32 static void normalMemset(char *s,int c,int n) 33 { 34 int i ; 35 for(i = 0 ; i < n ; i++) { 36 s[i] = c ; 37 } 38 } 上に戻る 39 /*----------------------------------------------*/ 40 /* 処理時間計測 */ 41 /*----------------------------------------------*/

/* 2/ 3 警告01/02: C:e309: staticに出来ませんか。K&R2 1.10: buf:char buf[64] ; %%%*/

42 char buf[64] ;

43 void slowChar(void) { 44 #define LOOP 0x7ffFF 45 #define START() (msec1 = msec_now()) 46 #define END(MES) printf(MES ,msec_now()-msec1) 47 long msec1,i ; 48 START(); 49 for(i=0;i<LOOP;i++){ tooSlowMemset (buf,0,sizeof(buf));} 50 END( "処理速度が遅過ぎる %u msec¥n") ; 51 START() ; 52 for(i=0;i<LOOP;i++){ traditionalMemset (buf,0,sizeof(buf));} 53 END( "伝統職人の処理時間 %u msec¥n"); 54 START() ; 55 for(i=0;i<LOOP;i++){ normalMemset (buf,0,sizeof(buf));} 56 END( "普通の人の処理時間 %u msec¥n") ; 57 START() ;

/* 3/ 3 警告02/02: A:e28: memset に対し#include <string.h>を使用するとコンパイラが引数ミスを防止してくれます。: %%%*/

58 for(i=0;i<LOOP;i++){ memset (buf,0,sizeof(buf));}

59 END( "標準関数の処理時間 %u msec¥n") ; 60 } 上に戻る