2014-06-24 5 views
0

cpp 애플리케이션을 만들고 있습니다.정적 변수가 앱 실행 시간을 늦추는 경우

namespace MSG { 
    static const int MSG_TYPE = 1; 
    // many more here like strings, ints, chars. 
} 

등의 많은 정적 변수가있는 .h 파일을 만들었습니다. 실행 속도가 느려지고 있습니다.

저는 많은 변수에서이 변수를 사용했습니다.

코드를 변경하는 데 드는 노력을 줄이면서 속도를 향상 시키려면 어떻게해야합니까?

성능 향상이 우선 순위입니다. 당신이 헤더를 포함 각 변환 단위에서 변수의 인스턴스가 이다 (이것은 정말 오히려 나를 놀라게 것이다, 아래 당신이 둔화하는 것은 무엇이라고 가정)

+0

문제를 해결해야하는 싱글 톤 패턴을 사용하십시오. –

+0

나는 우리가 다른 솔루션도 있기를 바란다 :) –

+10

그 변수가 시작 속도를 늦출 것이라고 확신합니까? 어떻게 확인 했니? –

답변

2

근본적인 문제. int의 경우 이것은 아마도 의 문제가 아니지만 유형 중 하나에 생성자가있는 경우 분명히 이 될 수 있습니다. 일반적으로 을 제외한 정수 상수는이며, 은 헤더에 static이 없어야합니다. (그리고 개체 자체가 const를하는 경우, 그것은 기본적으로 정적주의하십시오.) 따라서, 문자열을, 그것이 있어야 :

namespace Msg 
{ 
    extern std::string const someMessage; 
}; 

을 다음 소스 파일 :

std::string const Msg::someMessage("whatever"); 

(물론 원본 파일에는 헤더가 포함되어야합니다.)

정수가 포함되어 있어도주의해야합니다. 사용이 의 오른쪽 값으로 즉시 왼쪽으로 변환되지 않으면 실제 데이터 선언이 필요합니다. 이 방법으로 사용하는 모든 파일에는 파일 당 하나의 인스턴스가 있기 때문입니다.

아마도 더 나은 솔루션은 여기 네임 스페이스보다 클래스, 오히려 을 사용하는 것입니다 :

class Msg 
{ 
public: 
    static int const msgType = 1; 
    static std::string const someMessage; 
    // ... 
}; 

이 하나 개의 실제 인스턴스가 보장하지만, 여전히 적분 상수로 통합 일정을 작업 할 수 있습니다 표현. (여기서도 역시 소스 파일에 하나의 정의가 필요합니다.

+0

내 파일에'# ifndef'가 있습니다. 변수의 많은 인스턴스를 막지는 않겠습니까? –

+0

@AshishNegi 만약 당신이'# ifndef'를 포함 가드라고 말한다면, 아니오. 단일 번역 단위로 여러 내용을 포함하는 것을 막을 수 있습니다. –

+0

하지만 최종 실행 파일에는 단 하나의 변수 만 있습니까 ?? 또는 나는 틀린가? –

관련 문제