思ったよりも速度が出ないので、
ベテランの皆様にアドバイスをいただきたく書きこませていただきます。
以下のような命令で
ランダムな16進数の文字列型配列をペアで作っているのですが、
自分の環境だと15〜16ミリ秒かかってしまいます。
単純な数値の処理だとDLLで10倍くらいの速度になるのですが、
似たような処理をHSP側で実装した場合と比べ、2倍程度の速度にしかなっていないようです。
何か無駄な処理、遠回りな処理をしている部分があれば、
教えていただけると助かります
static void MAKE_DEF_GINE( void ) { // MAKE_GINE 命令の処理 // var1 array_M, var2 array_F, int arrynum, int gine_length // 渡された配列array_F,array_Mにそれぞれarrynumの要素を確保し // 各要素にgine_length bitのランダム16進数文字列を作る // // PVal *pvalarray_M; pvalarray_M = code_getpval(); // 配列array_Mの取得 PVal *pvalarray_F; pvalarray_F = code_getpval(); // 配列array_Fの取得 int arrynum=code_getdi(1); //1次元要素数のarrynumの取得 int gine_length=code_getdi(1); //初期化する値の取得 if (arrynum<=0) puterror( HSPERR_DIVIDED_BY_ZERO ); // 0以下ならばエラー(要素数0なので) if (gine_length<=0) puterror( HSPERR_DIVIDED_BY_ZERO ); // 0以下ならばエラー(要素数0なので) exinfo->HspFunc_dim( pvalarray_M, HSPVAR_FLAG_STR, 0, arrynum, 0, 0, 0 );//配列array_Mの要素を初期化 exinfo->HspFunc_dim( pvalarray_F, HSPVAR_FLAG_STR, 0, arrynum, 0, 0, 0 );//配列array_Fの要素を初期化 HspVarProc *vpSTR; //代入のためにHspVarProc構造体を用意 vpSTR = exinfo->HspFunc_getproc( HSPVAR_FLAG_STR ); srand((unsigned)time(NULL));//乱数初期化 for( int i = 0; i < arrynum; i ++ ) { char* ginestr1 = (char*)hspmalloc( (gine_length + 1) * sizeof(char) );//作業用の文字列メモリ確保 char* ginestr2 = (char*)hspmalloc( (gine_length + 1) * sizeof(char) );//作業用の文字列メモリ確保 for ( int ii = 0; ii < gine_length/4; ii ++ ) {//4文字づつランダム文字列生成 strcat(ginestr1,ToSTR(rand()%65536,4));//4文字づつ加算 strcat(ginestr2,ToSTR(rand()%65536,4));//4文字づつ加算 } for ( int ii = 0; ii < gine_length%4; ii ++ ) {//1文字づつランダム文字列生成 strcat(ginestr1,ToSTR(rand()%16,1));//1文字づつ加算 strcat(ginestr2,ToSTR(rand()%16,1));//1文字づつ加算 } pvalarray_M->offset = i;//オフセットiを指定 vpSTR->Set( pvalarray_M,vpSTR->GetPtr(pvalarray_M), ginestr1);//pvalarray_Mのオフセットiにginestr1を書きこむ hspfree( ginestr1 );//作業用メモリ解放 pvalarray_F->offset = i;//オフセットiを指定 vpSTR->Set( pvalarray_F,vpSTR->GetPtr(pvalarray_F), ginestr2);//pvalarray_Fのオフセットiにginestr2を書きこむ hspfree( ginestr2 );//作業用メモリ解放 } //) } //整数value1をdigit1ケタの16進数文字に変換 char* ToSTR(const int value1,const int digit1) { char a[256] ={'\0'};//文字列初期化 sprintf(a,"%0*x",digit1,value1); char* b= a;//操作した文字列のポインタ取得 return (b); }