#include결과 :#include #include using namespace std;; struct AAA { int n; string str; }; #define BIG 5000000 int main() { vector v; for (int i = 0; i < BIG; i++) { AAA a = { 1, "aaa" }; v.push_back(a); } clock_t now; cout << "start" << endl; int n = 0; now = clock(); for (vector ::iterator it = v.begin(); it != v.end(); ++it) { n += it->n; } cout << "iterator: " << clock() - now << endl; n = 0; now = clock(); for (size_t i = 0; i < v.size(); ++i) { n += v[i].n; } cout << "index: " << clock() - now << endl; getchar(); return n != 0; }
index가 빠르다.
loop를 돌면서 아무런 동작도 안했을 때
for (vector::iterator it = v.begin(); it != v.end(); ++it) { ; } cout << "iterator: " << clock() - now << endl; n = 0; now = clock(); for (size_t i = 0; i < v.size(); ++i) { ; } cout << "index: " << clock() - now << endl;
결과:
index가 빠르다
clock_t now; cout << "start" << endl; int n = 0; now = clock(); auto eit = v.end(); for (vector이건 뭘해도... index가 빠르다::iterator it = v.begin(); it != eit; ++it) { ; } cout << "iterator: " << clock() - now << endl; n = 0; now = clock(); int iSize = v.size(); for (size_t i = 0; i < iSize; ++i) { ; } cout << "index: " << clock() - now << endl;
어셈블리 코드를 뜯어보니까
iterator로 멤버 접근하는거나 []로 멤버에 접근하는거나 operator -> operator []접근으로 비슷해보이는데
순회할때의 오버헤드가 달라서 iterator가 더 시간이 걸림
배열 for loop 순회하는 부분 어셈블리 코드 파일
'2020 이전 > 이것저것' 카테고리의 다른 글
게임 서버 프로그래밍 교과서 2장 컴퓨터 네트워크 (0) | 2019.05.15 |
---|---|
포워드, 디퍼드 렌더링 (0) | 2019.03.21 |
한줄설명 (0) | 2019.01.11 |
드로우 콜과 텍스처 아틀라스와 배치와 인스턴싱 (0) | 2018.11.08 |
xml & json (0) | 2018.11.05 |