如何快速产生随机字符串, 可见字符的ASCII范围为: 0x20~0x7e.
一般人可能就可以会直接用:
for (i = 0; i < len - 1; i++)
p[i] = rand() % (0x7e + 0x20) + 0x20;
p[i] = '\0';
但是这样会比下面慢很多, 我在RH9, GCC-3.2.2-5下面测试下面的方法要比上面快2倍以上.
当然测试的时候一定要使用大的字符空间比如30M, 60M ...
下面分析以下原因:
现在一般机器为32位机, 可以一次性直接运算32bit, 这样就比8bit运算要快很多.
char *gen_str(char *pstr, size_t len)
{
int i;
char *p;
uint32_t *p32;
len -= 1;
p = pstr;
p32 = (uint32_t )pstr;
for (i = 0; i < len / 4; i++)
p32[i] = (rand() | 0x20202020) & 0x7e7e7e7e;
i = i * 4;
for (; i < len; i++)
p[i] = rand() % (0x7e + 0x20) + 0x20;
p[i] = '\0';
return (pstr);
}
|
阅读(4451) | 评论(0) | 转发(0) |