精品理论电影在线_日韩视频一区二区_一本色道精品久久一区二区三区_香蕉综合视频

Run-Time函數isascii&iswascii&toascii

發布時間:2011-08-29 共2頁


  效率測試:
  #include "jtianling.h"
  #define __isasciims(_Char) ( (unsigned)(_Char) < 0x80 )
  #define __isasciigcc(c) (((c) & ~0x7f) == 0) /* if C is a 7 bit value*/
  const int DEF_TEST_TIMES = 1000000000;
  void CheckMS(char ac)
  {
  double ldTimeLast = jtianling::GetTime();
  for (int i=0; i<DEF_TEST_TIMES ; ++i)
  {
  __isasciims(ac);
  }
  double ldTimePast = jtianling::GetTime() - ldTimeLast;
  printf("__isasciims %c run %d times cost %lf secs.\n", ac, DEF_TEST_TIMES, ldTimePast);
  }
  void Checkgcc(char ac)
  {
  double ldTimeLast = jtianling::GetTime();
  for (int i=0; i<DEF_TEST_TIMES ; ++i)
  {
  __isasciigcc(ac);
  }
  double ldTimePast = jtianling::GetTime() - ldTimeLast;
  printf("__isasciigcc %c run %d times cost %lf secs.\n", ac, DEF_TEST_TIMES, ldTimePast);
  }
  int _tmain(int argc, _TCHAR* argv[])
  {
  char lc = 'a';
  char lc2 = '中';
  CheckMS(lc);
  Checkgcc(lc);
  CheckMS(lc);
  Checkgcc(lc2);
  return 0;
  }
  至于GetTime函數的意義,請參考我以前寫的庫,無非就是獲取當前時間,不知道也沒有關系。你可以用time(NULL)來替代,只不過精度沒有這個函數高而已。
  實際的測試結果很讓人失望,在測試了幾乎無數次以后,MS和gcc的實現效率都幾乎相同,在10億這個級別,gcc也不過有時快0.1秒而已,而且多次運行,還不是太穩定。看來并不是復雜的實現就一定好。。。
  相關函數:
  msdn:
  Converts characters.
  int __toascii(
  int c
  );
  這個函數也是一個雙前置下劃線的函數,MS,gcc中都有實現。而且在此時,實現都是一樣的。
  #define __toascii(_Char) ( (_Char) & 0x7f )
  gcc注釋到 “mask off high bits.”
  這里和gcc中__isascii函數實現的前一部分很像,一個是去除低七位,一個是保留低七位。看了這個以后才知道gcc為什么想到這樣實現__isascii了。
  

百分百考試網 考試寶典

立即免費試用