2012-09-26 6 views
-2

내 프로그램에서 이상한 오류가 발생했습니다. 헤더 파일로 인해 프로그램 속도가 느려집니다. 헤더 파일을 빈 코드 (즉 : main() {})로 테스트하고 빈 코드를 실행하는 데 40 초가 걸립니다.헤더 파일의 프로그램 속도가 느려짐

헤더 파일

#include "lz.h" 
#include "stdafx.h" 
#include <string> 

std::string dic[1000000]; 
int i=0; 
int e=0; 
std::string cstr(char c)        
{ 
    return std::string(1,c); 
} 

void init() 
{   
    for (e=0;e<=255;e++) dic[e]=cstr(e); 
     e=e-1;   
} 

테스트의 주요 파일 .CPP에게

#include "stdafx.h" 
#include <string> 

#ifndef LZ_H 
#define LZ_H 

extern int e,i; 
extern std::string dic[1000000]; 
void init(); 

#endif 

기능 파일 .CPP에게

#include "lz.h" 
void main() {} 

결과를있는 .h : 40 대. 이전에 그런 이상한 오류를 본 적이 없습니다.

+0

사이드 참고 : 라인이 끝나기 전에 모든 공간은 무엇인가? 또한, 긴 실행 시간이 백만 가지'std :: string'과 관련이있을 수 있습니까? – Shahbaz

+0

전역이 기본값으로 초기화됩니다. 그래서 배열은 빈 문자열로 채워지는지 여부와 관계없이 빈 문자열로 채워집니다. (부인 : 특정 유형의 초기화에 대해서는 틀릴 수도 있지만 동일한 원칙이 적용됩니다). – BoBTFish

+1

헤더 파일에''stdafx.h ''를 포함하면 안됩니다. 대신 원본 파일에 포함될 첫 번째 파일이어야합니다. –

답변

13

.cpp 파일에 전역 문자열을 1 백만 개로 선언하면 컴파일러가 프로그램 시작시 1 백만 개의 문자열 개체를 만드는 코드를 작성하게됩니다. 이것이 귀하의 경기 침체의 원인입니다.

만 배열의 첫 번째 256 개 요소를 사용하는 것처럼, 그것은 크기로 변경 256

+0

아마도. 그러나 main()에 코드가 거의없는 줄 단위로 실행하면 프로그램이 느리게 시작됩니다. '}'에 도달하면 속도가 매우 느려집니다. – user1690220

+1

백만 줄 모두가 파괴되어야하기 때문에 상당한 시간이 걸리기 때문입니다. –

관련 문제