2009-03-12 8 views
8

전역 연산자에 과부하를 걸고 성능에 민감한 응용 프로그램을 삭제하려고합니다. http://www.informit.com/articles/article.aspx?p=30642&seqNum=3에 설명 된 우려 사항과 인텔 TBB의 할당 자 사용 권장 사항을 읽어 보았습니다. http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htmC++에서 전역 연산자 new/delete 오버로드

처음으로 새로운 내용과 과부하로 인해 몇 가지 질문이 있습니다.

"new"호출이 포함 된 모든 파일에 오버로드 된 새 함수를 포함하는 새 헤더 Allocator.h (또는 Pre.h)를 포함해야합니까? 이것은 지루합니다.

또는 각 번역 단위에 Allocator.h (이전)가 포함 된 "gcc -include Allocator.h ..."를 사용해야합니까? 최대한 코드 플랫폼을 독립적으로 유지하고 싶습니다. 모든 컴파일러가 "gcc -include"와 비슷한 것을 지원합니까?

답변

14

operator newoperator delete을 오버로드하려면 해당 기능을 구현하기 만하면됩니다. 이미 언어의 일부로 정의되어 있으므로 명시 적으로 정의 할 필요가 없습니다.

편집 : 다른 매개 변수를 사용하는 연산자 new를 정의하려면 모든 위치에 #include를 입력해야합니다. 그러나 당신은 그렇게 할 수 있습니다. 그것은 대부분 스타일의 문제입니다.

그리고 새로운 글로벌 연산자의 모든 변종을 구현하고 삭제하는 것을 잊지 마세요 : new, new[], delete, delete[]std::nothrow 변종.

2

Visual Studio를 사용하고 미리 컴파일 된 헤더를 사용하는 경우에는 include를 거기에 넣을 수 있습니다. 나는 gcc가 컴파일 시간을 향상시킬 수있는 미리 컴파일 된 헤더를 가지고 있다고 생각한다.