2012-09-26 139 views
-2

我的程序遇到了一個奇怪的錯誤:頭文件減慢了程序的速度。我使用空代碼測試頭文件(即:main() {}),並且需要40秒才能運行該空代碼。頭文件減慢程序的速度

頭文件的.h

#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" 
#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;   
} 

Test主文件的.cpp

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

結果:40歲。 我從來沒有遇到過這樣奇怪的錯誤。

+0

旁註:用線年底前所有這些空間是什麼?另外,很長的執行時間可能與一百萬個'std :: string'試圖構造? – Shahbaz

+0

全局默認初始化。所以這個數組會被填充空字符串,無論您是否使用它。 (免責聲明:我可能對特定類型的初始化錯誤,但同樣的原則也適用)。 – BoBTFish

+1

你不應該在頭文件中包含''stdafx.h''。相反,它應該是第一個包含在源文件中的文件。 –

回答

13

通過在.cpp文件中放入一百萬個字符串的全局聲明,迫使編譯器在程序啓動時將代碼放入一百萬個字符串對象中。這是你放慢速度的原因。

當你只使用數組的第一個256點的元素,改變它的大小爲256

+0

也許吧。但是,當我用main()中的少量代碼逐行運行時,程序最終會變慢,而不是在開始。當我到達'}'時它非常慢。 – user1690220

+1

這是因爲所有的100萬字符串也必須被破壞,這也需要相當長的時間。 –