Sử dụng từ khóa auto
mới đã làm giảm thời gian thực thi mã của tôi. Tôi thu hẹp vấn đề đối với đoạn mã đơn giản sau đây:Hình phạt hiệu suất sử dụng từ khóa 'tự động' trong Visual Studio 2010
#include <iostream>
#include <map>
#include <vector>
#include <deque>
#include <time.h>
using namespace std;
void func1(map<int, vector<deque<float>>>& m)
{
vector<deque<float>>& v = m[1];
}
void func2(map<int, vector<deque<float>>>& m)
{
auto v = m[1];
}
void main() {
map<int, vector<deque<float>>> m;
m[1].push_back(deque<float>(1000,1));
clock_t begin=clock();
for(int i = 0; i < 100000; ++i) func1(m);
cout << "100000 x func1: " << (((double)(clock() - begin))/CLOCKS_PER_SEC) << " sec." << endl;
begin=clock();
for(int i = 0; i < 100000; ++i) func2(m);
cout << "100000 x func2: " << (((double)(clock() - begin))/CLOCKS_PER_SEC) << " sec." << endl;
}
Kết quả tôi nhận được trên i7 của tôi/máy Win7 (chế độ Release; VS2010) là:
100000 x func1: 0.001 sec.
100000 x func2: 3.484 sec.
bất cứ ai có thể giải thích lý do tại sao sử dụng auto
kết quả trong một thời gian thực hiện khác nhau như vậy?
Rõ ràng, có cách giải quyết đơn giản, tức là, ngừng sử dụng auto
hoàn toàn, nhưng tôi hy vọng có cách tốt hơn để khắc phục vấn đề này.
Chết tiệt, bạn phải thật nhanh để trả lời những câu hỏi đó. ;-) – Andre
Tôi nghĩ (nhưng tôi đoán tôi đã sai) tự động sử dụng kiểu trả về của hàm. Kiểu trả về của toán tử [] là tham chiếu, vậy tại sao chúng ta cần phải thêm '&' bổ sung? – MDman
@MDman: 'auto' loại bỏ cv và tham chiếu cấp cao nhất, nó" phân rã "loại suy luận. – Xeo