यहां एक साधारण मामले का त्वरित परीक्षण है: सभी संख्याओं के मानक इनपुट और XOR से संख्याओं की एक सूची पढ़ने के लिए एक कार्यक्रम।
आईस्ट्रीम संस्करण:
#include <iostream>
int main(int argc, char **argv) {
int parity = 0;
int x;
while (std::cin >> x)
parity ^= x;
std::cout << parity << std::endl;
return 0;
}
स्कैनफ़ संस्करण:
#include <stdio.h>
int main(int argc, char **argv) {
int parity = 0;
int x;
while (1 == scanf("%d", &x))
parity ^= x;
printf("%d\n", parity);
return 0;
}
परिणाम
एक तीसरे कार्यक्रम का उपयोग करते हुए, मैंने एक पाठ फ़ाइल बनाई जिसमें 33,280,276 यादृच्छिक संख्याएँ थीं। निष्पादन समय हैं:
iostream version: 24.3 seconds
scanf version: 6.4 seconds
कंपाइलर की ऑप्टिमाइज़ेशन सेटिंग्स को बदलने से परिणाम बिल्कुल नहीं बदले।
इस प्रकार: वास्तव में एक गति अंतर है।
EDIT: उपयोगकर्ता clyfish नीचे इंगित करता है कि गति अंतर काफी हद तक iostream I / O फ़ंक्शन के साथ CI / O फ़ंक्शन के साथ सिंक्रनाइज़ेशन बनाए रखने के कारण है। हम इसे कॉल के साथ बंद कर सकते हैं std::ios::sync_with_stdio(false);
:
#include <iostream>
int main(int argc, char **argv) {
int parity = 0;
int x;
std::ios::sync_with_stdio(false);
while (std::cin >> x)
parity ^= x;
std::cout << parity << std::endl;
return 0;
}
नए परिणाम:
iostream version: 21.9 seconds
scanf version: 6.8 seconds
iostream with sync_with_stdio(false): 5.5 seconds
सी ++ iostream जीत! यह पता चला है कि यह आंतरिक सिंकिंग / फ्लशिंग क्या है जो आमतौर पर iostream i / o को धीमा कर देता है। यदि हम stdio और iostream नहीं मिला रहे हैं, तो हम इसे बंद कर सकते हैं, और फिर iostream सबसे तेज़ है।
कोड: https://gist.github.com/3845568