hyzqb 发表于 2018-11-5 07:16:40

redis-字符串

/* Return the length of the null-terminated string STR.Scan for  
   the null terminator quickly by testing four bytes at a time.*/size_tstrlen (str)   const char *str;
  
{const char *char_ptr;const unsigned long int *longword_ptr;unsigned long int longword, himagic, lomagic;/* Handle the first few characters by reading one character at a time.
  
   Do this until CHAR_PTR is aligned on a longword boundary.*/
  
for (char_ptr = str;
  
      ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
  
            ++char_ptr)    if (*char_ptr == '\0')      return char_ptr - str;/* All these elucidatory comments refer to 4-byte longwords,
  
   but the theory applies equally well to 8-byte longwords.*/
  

  
longword_ptr = (unsigned long int *) char_ptr;/* Bits 31, 24, 16, and 8 of this number are zero.Call these bits
  
   the "holes."Note that there is a hole just to the left of
  
   each byte, with an extra at the end:
  

  
   bits:01111110 11111110 11111110 11111111
  
   bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
  

  
   The 1-bits make sure that carries propagate to the next 0-bit.
  
   The 0-bits provide holes for carries to fall into.*/
  
himagic = 0x80808080L;
  
lomagic = 0x01010101L;if (sizeof (longword) > 4)
  
{      /* 64-bit version of the magic.*/
  
      /* Do the shift in two steps to avoid a warning if long has 32 bits.*/
  
      himagic = ((himagic
页: [1]
查看完整版本: redis-字符串