Fread / fwrite के लिए इष्टतम बफर आकार [बंद]


10

POSIX fread / fwrite फ़ंक्शन के माध्यम से फ़ाइलों को पढ़ने / लिखने के लिए मुझे किस बफर आकार का चयन करना चाहिए?

c 

यह सवाल बहुत स्थानीय है। यह केवल उस विशेष कार्यक्रम से संबंधित है जिसे आप इस समय कोड कर रहे हैं।
वर्ल्ड इंजीनियर

मेरा मतलब सामान्य मामला है। कई कार्यक्रमों की जरूरत है पढ़ने के लिए / बहुत अज्ञात आकार (जैसे के साथ सारी फाइलें लिखने grep, cp)

क्या आपका मतलब है POSIX read/ writeफ़ंक्शन या ANSI / ISO / IEC fread/ fwriteफ़ंक्शन?
Jan Hudec

जवाबों:


6

ANSI / ISO fread/fwriteफ़ंक्शंस बफ़र्ड हैं। बफ़र आमतौर पर 8 KiB होता है और इससे ग्रैन्युलैरिटी से स्वतंत्र हो जाता है जो आप अपने कोड में उपयोग करते हैं। यह बफर को थोड़ा बढ़ाने के लिए समझ में आ सकता है, शायद नीचे के मूल्य पर। बल्क ट्रांसफर के लिए वे हमेशा एक छोटे से धीमे होंगे हालांकि अतिरिक्त प्रतियों के कारण।

POSIX read/writeफ़ंक्शंस के लिए यह ऑपरेटिंग सिस्टम और डिवाइस और बहुत सी अन्य चीज़ों पर निर्भर करता है, लेकिन व्यावहारिक अनुभव यह है कि आप KiB के दसियों से आगे बफ़र बढ़ाकर कोई प्रदर्शन सुधार प्राप्त नहीं करते हैं, इसलिए 32 या 64 KiB सही है।

कुछ प्रणालियों पर निर्भरता दूसरों की तुलना में बड़ी है। लिनक्स पर अंतर आमतौर पर 8 KiB से ऊपर न्यूनतम होता है (इसलिए डिफ़ॉल्ट बफर ठीक है), उदाहरण के लिए Windows CE (देशी एपीआई का उपयोग करके; उनके पास POSIX नहीं है) 64 KiB से भी बड़ी मदद अभी भी है। यह डिवाइस पर भी निर्भर हो सकता है।


अतः 8k बफ़र्ड I / O (यानी fread, fwrite) और 32 / 64K के लिए अनफ़िल्टर्ड? यदि छवि डेटा भेजना है तो क्या कोई विशिष्ट औचित्य है कि वह बफर या असंबद्ध का चयन करे?
फ्रांसेस्को बोई

1
@FrancescoBoi, 8k बफ़र्ड के लिए केवल डिफ़ॉल्ट है जिसे आप बदल सकते हैं। जब आप एक बार में कुछ बाइट्स संसाधित करते हैं, तो सभी संदर्भ स्विच से बचने के लिए बफरिंग की बात होती है। छवि के लिए आपको आमतौर पर इसकी आवश्यकता होती है या सभी होती है और फिर असंबद्ध बेहतर होता है क्योंकि यह थोड़ा प्रसंस्करण को छोड़ देता है।
जन हुदेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.