我一直觉得我不应该在循环中定义一个变量,因为它是不必要的或浪费的。这使我想知道如果下面的recv()函数需要一个新的缓冲区循环的每次迭代:为什么在循环内部定义这个缓冲区?
while (totalBytesRecvd < echoStrLen)
{
char buffer[BUFSIZE];
numBytes = recv(sock, buffer, BUFSIZE - 1, 0);
...
totalBytesRecvd += numBytes;
buffer[numBytes] = '\0';
fputs(buffer, stdout);
}
为的recv()的文档没有提及它如何使用缓冲区指针什么。为了更好的理解,我试着在循环之前定义缓冲区,并且recv()似乎覆盖了缓冲区,而不是重新定义缓冲区。这是有道理的,因为recv()传递了一个指向缓冲区开始的指针。
是否有一个特定的原因来定义一个缓冲区一遍又一遍的循环内?或者,我对此的基本理解是正确的?
+1,比我的回答好得多。 – Martin
迄今为止所有非常有用(和类似)的答案。任何人都可以指出我的来源?或者我可以在我的编译器文档中找到所有这些吗?编译器优化在我读过的C编程书中被掩盖了。 – Nocturno
我的源代码花费太多时间看编译器生成的汇编程序:)。一般来说,不要担心这种优化。为正确的工作使用正确的算法,并且只有考虑到这些类型的调整,才能演示一段代码*需要*优化。 – Martin