저는 C ++ / STL 세계에서 왔고 객관적인 -c 컨테이너가 stl과 어떻게 비교되는지 확인하고 싶었습니다.
배열을 비교하고 싶었습니다. 숫자를 추가하는 유일한 방법은 mber to an NSArray
는 완전히 느린 NSNumber
을 사용하고 있으며 내 램을 비워서 수동으로 할당 해제해야한다고 생각합니다. 하지만 부작용을 테스트하고 싶지 않기 때문에 [NSNull null]
을 배열에 추가했습니다.
배열에 10k 개를 1k 번 추가 한 결과 :
NSArray
-0.923411 초
vector
-0.129984 초
할당 및 할당 해제 일 수 있다고 생각했기 때문에 배열 수 (코드에서 imax
)를 1로 설정하고 추가 횟수를 10000000 ( jmax
)으로 설정했지만 더 느 렸습니다
NSArray
-2.19859 초
vector
-0.223471 초
편집 :
주석에서 언급했듯이 배열의 일정한 증가 크기가 문제가 될 수 있으므로 arrayWithCapacity
를 사용하여 NSArray
를 만들었지 만 reserve [11156185와 함께
vector
을 만들었습니다. ]도 이전보다 느 렸습니다 (!) ( imax
= 1, jmax
= 10000000).
NSArray
-2.55942
vector
-0.19139
편집 종료
왜 이렇게 느린가요?
참조 용 코드 :
#import <Foundation/Foundation.h>
#include <vector>
#include <iostream>
#include <time.h>
using namespace std;
int main (int argc, const char * argv[])
{
int imax = 1000;
int jmax = 10000;
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
cout << "Vector insertions" << endl;
clock_t start = clock();
for(int i = 0; i < imax; i++)
{
vector<int> *v = new vector<int>();
for(int j = 0; j < jmax; j++)
{
v->push_back(j);
}
delete v;
}
double interval = (clock() - start) / (double)CLOCKS_PER_SEC;
cout << interval << " seconds" << endl;
cout << "NSArray insertions" << endl;
start = clock();
for(int i = 0; i < imax; i++)
{
NSMutableArray *v = [[NSMutableArray alloc] init];
for(int j = 0; j < jmax; j++)
{
[v addObject:[NSNull null]];
}
[v dealloc];
}
interval = (clock() - start) / (double)CLOCKS_PER_SEC;
cout << interval << " seconds" << endl;
[pool drain];
return 0;
}