Tengo un conocimiento general de restrict
pero espero aclarar algunos puntos finos. Tengo una función que lee una cadena terminada en nulo de un buffer y escribe una versión URL codificada en otro buffer. La función tiene esta firma (actualmente sin restrict
):Cuándo usar Restringir y cuándo no a
char const *StringUrlEncode(char const *unencoded,
char *encoded,
char *encodedEnd);
unencoded
es mi cadena de origen terminada en nulo. El búfer de destino está representado por encoded
y encodedEnd
, donde encoded
apunta al primer char
en la memoria intermedia y encodedEnd
apunta a que el primer carácter después el tampón, es decir, la función escribirán char
s hasta, pero sin incluir la ubicación señaló por encodedEnd
- este es su par iterador básico begin
/end
si está familiarizado con las convenciones C++ STL.
Si añado restrict
a esta función, en caso de que sólo se puede aplicar a los dos primeros parámetros:
char const *StringUrlEncode(char const *restrict unencoded,
char *restrict encoded,
char *encodedEnd);
o hay algún beneficio que no estoy entendiendo añadiéndolo a los tres parámetros?
Veo que hacer los buffers de entrada y salida restrict
ayuda al compilador a saber que no se superponen. Pero dado que el último parámetro, encodedEnd
, solo se usa para marcar el final del buffer de salida, estoy pensando que restrict
no sería de ninguna ayuda para el compilador aquí (aunque supongo que no estaría mal, aparte de agregar ruido innecesario a la declaración de la función).
He leído el artículo de Mike (dos veces) y es un buen comienzo, pero me ha dejado algunas preguntas :-) –
El enlace proporcionado no es funcional. Google sugiere que hay una versión actualizada en http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html (validated 2009-09-06) pero eso también está dando problemas. La versión almacenada en caché está disponible en Google. –