나는 덧셈, 곱셈, 뺄셈, 나눗셈 등의 연산자를 가진 벡터 클래스를 가지고있다. 나는 벡터 연산을 많이하는 프로그램을 최적화하려고 노력하고 있으며, 약 50 %의 시간이 벡터를 생성하고 파괴하는 것을 깨닫고있다. 나는 이것이 벡터에 대해 복합이 아닌 수학 연산자를 호출 할 때마다 새로운 벡터가 구성된다는 것을 이해합니다. 복합 연산자를 사용하거나 벡터 연산을 확장하지 않고이를 방지 할 수있는 방법이 있습니까?복합 작업이 아닌 동안 공사를 막을 수있는 방법이 있습니까?
내가있는 경우 : C 완전히 새로운 벡터이기 때문에
Vector a = Vector(x, y, z);
Vector b = Vector(a, b, c);
Vector c = a + b;
내가 + = 사용할 수 없습니다. 나는이와 속도를 높일 수 있습니다 알고
c.x = a.x + b.x;
c.y = a.y + b.y;
c.z = a.z + b.z;
을하지만, 단지 연산자를 사용하여로 그 깨끗하지 않는 것 같습니다.
제 3의 벡터가 이미 구성되었다고 가정하십시오. 나는 그 구성 요소를 수정하기 만하고, 새로운 벡터를 만들지 않고, 새 벡터의 구성 요소를 이미 생성 된 구성 요소로 복사하는 것이 아니다. 이것은 낭비입니다. 또한 한 줄에 여러 작업을 수행하는 경우 이러한 각 작업에 대해 필요없는 새로운 벡터가 만들어집니다. – Stewart
생성 된 임시 객체를 줄이는 확실한 방법은 Vector 클래스에 move 생성자와 move 대입 연산자를 구현하여 C++ 0x 이동 시멘틱을 에뮬레이트하는 것입니다. MyVector_move_t 클래스 나 무엇이든간에 반환 할 임시 객체를 래핑해야합니다. 이 작업에 대한 자세한 내용은 내가 편집 한 포스트에서 언급 한 기사를 참조하십시오. 가장 좋은 점은 C++ 0x가 발생하면 가짜 이동 생성자를 실제 이동 생성자로 바꿀 수 있다는 것입니다. –