Siempre he tenido la impresión de que no debería definir una variable dentro de un ciclo porque es innecesario o derrochador. Esto hace que me pregunte si la siguiente función recv() necesita un tampón fresco para cada iteración del bucle:¿Por qué se define este búfer dentro de un bucle?
while (totalBytesRecvd < echoStrLen)
{
char buffer[BUFSIZE];
numBytes = recv(sock, buffer, BUFSIZE - 1, 0);
...
totalBytesRecvd += numBytes;
buffer[numBytes] = '\0';
fputs(buffer, stdout);
}
La documentación para recv() no menciona nada acerca de cómo se utiliza el puntero de memoria intermedia. Para una mejor comprensión, traté de definir el búfer justo antes del bucle, y recv() parece sobrescribir el búfer, en lugar de redefinirlo. Lo cual tiene sentido ya que recv() pasa un puntero al principio del búfer.
¿Hay alguna razón específica para definir un búfer una y otra vez dentro de un bucle? ¿O es mi entendimiento básico de esto correcto?
+1, mucho mejor que mi respuesta. – Martin
Todas las respuestas muy útiles (y similares) hasta el momento. ¿Alguien puede señalarme su origen? ¿O puedo encontrar todo esto en mi documentación del compilador? La optimización del compilador se pasó por alto en el libro de programación C que leí. – Nocturno
Mi fuente es demasiado tiempo dedicado a mirar el ensamblador generado por los compiladores :). En general, no se preocupe por este tipo de optimización. Use los algoritmos correctos para el trabajo correcto, y solo considere estos tipos de ajustes si puede demostrar una pieza de código * necesita * optimización. – Martin