Đây là một bài kiểm tra nhanh về một trường hợp đơn giản: một chương trình đọc danh sách các số từ đầu vào tiêu chuẩn và XOR tất cả các số.
phiên bản 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;
}
phiên bản quét:
#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;
}
Các kết quả
Sử dụng chương trình thứ ba, tôi đã tạo một tệp văn bản chứa 33.280.276 số ngẫu nhiên. Thời gian thực hiện là:
iostream version: 24.3 seconds
scanf version: 6.4 seconds
Thay đổi cài đặt tối ưu hóa của trình biên dịch dường như không thay đổi nhiều kết quả.
Như vậy: thực sự có sự khác biệt về tốc độ.
EDIT: Người dùng clyfish chỉ ra bên dưới rằng sự khác biệt về tốc độ phần lớn là do các chức năng I / O của iostream duy trì đồng bộ hóa với các chức năng CI / O. Chúng tôi có thể tắt điều này bằng một cuộc gọi đến 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;
}
Kết quả mới:
iostream version: 21.9 seconds
scanf version: 6.8 seconds
iostream with sync_with_stdio(false): 5.5 seconds
C ++ iostream thắng! Nó chỉ ra rằng đồng bộ hóa / tuôn ra nội bộ này là những gì thường làm chậm iostream i / o. Nếu chúng ta không trộn stdio và iostream, chúng ta có thể tắt nó đi, và sau đó iostream là nhanh nhất.
Mã: https://gist.github.com/3845568