এখানে একটি সাধারণ মামলার তাত্ক্ষণিক পরীক্ষা: স্ট্যান্ডার্ড ইনপুট থেকে নম্বরগুলির তালিকা পড়ার প্রোগ্রাম এবং সমস্ত নম্বরটি এক্সওআর a
iostream সংস্করণ:
#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
সংকলকটির অপ্টিমাইজেশন সেটিংস পরিবর্তন করা ফলাফলগুলি মোটেও তেমন বদলেছে বলে মনে হচ্ছে না।
সুতরাং: সত্যিই একটি গতি পার্থক্য আছে।
সম্পাদনা: ব্যবহারকারী ক্লিফিশ নীচে উল্লেখ করেছেন যে গতির পার্থক্য মূলত আইওস্ট্রিম আই / ও ফাংশনগুলির সাথে সিআই / ও ফাংশনগুলির সাথে সুসংগতকরণ বজায় রাখার কারণে। আমরা একটি কল দিয়ে এটি বন্ধ করতে পারি 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 i / o হ্রাস করে। যদি আমরা স্টিডিও এবং আইস্ট্রিম মিশ্রিত না করে থাকি তবে আমরা এটিকে বন্ধ করতে পারি এবং তারপরে আইস্ট্রিমটি সবচেয়ে দ্রুত।
কোড: https://gist.github.com/3845568