我一直覺得我不應該在循環中定義一個變量,因爲它是不必要的或浪費的。這使我想知道如果下面的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