Por que reimplementar strlen como loop + subtração?
Inspirado poressa questã sobre o seguinte código do SQLite3:
static int strlen30(const char *z){
const char *z2 = z;
while( *z2 ){ z2++; }
return 0x3fffffff & (int)(z2 - z);
}
que é acompanhado por umcommit message dizendo que esta função ajuda comint
estouros.
Estou particularmente interessado nesta parte:
const char *z2 = z;
while( *z2 ){ z2++; }
para mim esse loop avançaz2
atéz2
aponta para o terminador nulo. Entãoz2-z
produz o comprimento da strin
Por que não usarstrlen()
para esta parte e reescreva assim:
return 0x3fffffff & (int)(strlen(z));
Por que usar loop + subtração em vez destrlen()
? O que loop + subtração pode fazer o questrlen()
não pode?