|  |  |
|
C++ new/delete 연산에 걸리는 시간
간단한 예제로 시작하겠다. 프로그램에서 복소수를 표현하는
Complex
클래스를 사용한다고 가정하자. 또한 프로그램은
new
와
delete
연산을 사용해서 복소수를 할당하고 해제한다. 코드는
Listing 1
과 같다.
Listing 1. C++로 구현한 Complex 클래스
class Complex
{
public:
Complex (double a, double b): r (a), c (b) {}
private:
double r; // Real Part
double c; // Complex Part
};
int main(int argc, char* argv[])
{
Complex* array[1000];
for (int i = 0;i < 5000; i++) {
for (int j = 0; j < 1000; j++) {
array[j] = new Complex (i, j);
}
for (int j = 0; j < 1000; j++) {
delete array[j];
}
}
return 0;
}
|
안쪽 루프 두 개는 메모리를 1000번 할당하고 1000번 해제한다. 바깥쪽 루프는 안쪽 루프
두 개를 5000번 반복한다. 즉 프로그램을 실행하면 사용자 코드와 커널 코드 사이에 문맥
전환이 1000만 번 일어난다. 솔라리스 10에서 gcc-3.4.6으로 프로그램을
컴파일하여 돌리면 평균 3.5초가 걸린다. 이 값이 컴파일러가 제공하는 전역
new
/
delete
연산을 사용하는 경우에 얻어지는 기준 성능 지표다. 컴파일러보다 속력을 높여주는 메모리
관리자를 직접 구현하려면
Complex
클래스에
new
/
delete
연산을 재정의해야 한다.
|  |
|