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了。
  

百分百考试网 考试宝典

立即免费试用