改めて処理時間を測ってみた。実用にはまったく問題ないけど、この差はなんだろう。
改めて処理時間を測ってみた。実用にはまったく問題ないけど、この差はなんだろう。
/*// c4hsp で使ったCのソースコードint func(unsigned char *str) {unsigned char *p = str;while ( *( p++ ) );return (p - str -1);}#define OPT maximum // disable, small, fast, maximum (不使用, 最小化, 速度, 最大限の最適化)#define LINE 8#define VECTORTYPE ()#define MODULE mod_strlen2#define FUNC strlen2*/// c4hsp で出力した機械語モジュール#ifndef strlen2#module mod_strlen2#uselib "kernel32.dll"#func VirtualAllocmod_strlen2 "VirtualAlloc" int, int, int, int#func VirtualFreemod_strlen2 "VirtualFree" int, int, int#define NULL 0x00000000#define PAGE_EXECUTE_READWRITE 0x00000040#define MEM_COMMIT 0x00001000#define MEM_RESERVE 0x00002000#define MEM_DECOMMIT 0x00004000#define MEM_RELEASE 0x00008000#deffunc mod_strlen2_destructor onexitif(NULL != strlen2_ptr) {VirtualFreemod_strlen2 strlen2_ptr, 20, MEM_DECOMMITVirtualFreemod_strlen2 strlen2_ptr, 0, MEM_RELEASEstrlen2_ptr = NULL}return#deffunc mod_strlen2_constructormod_strlen2_destructorVirtualAllocmod_strlen2 NULL, 20, MEM_RESERVE, PAGE_EXECUTE_READWRITEVirtualAllocmod_strlen2 stat, 20, MEM_COMMIT, PAGE_EXECUTE_READWRITEstrlen2_ptr = statdupptr strlen2_bin, stat, 20, vartype("int")strlen2_bin(0) = $04244C8B, $108AC18B, $75D28440, $48C12BF9, $000000C3return// マクロだったのを関数化した#defcfunc strlen2 var sprm@mod_strlen2 = varptr(s)return callfunc(prm@mod_strlen2, strlen2_ptr@mod_strlen2, 1)#globalmod_strlen2_constructor#endif#include "winmm.as"// 適当にテキスト作成mes "文字列作成中...\n"size = 1024 * 1024 * 100 ; 100MBsdim a, size + 1memset a, 'a', size// 計測max = 10 ; 10 回繰り返す。size * max で 1000MB相当mes "strlen 計測中..."timeGetTime :time1 = statrepeat maxl1 = strlen(a)looptimeGetTime :mes "所要時間:" + (stat - time1) + "ms" + ", 取得値:" + l1 + "byte"mes "strlen2 計測中..."timeGetTime :time1 = statrepeat maxl2 = strlen2(a)looptimeGetTime :mes "所要時間:" + (stat - time1) + "ms" + ", 取得値:" + l2 + "byte"