头文件减慢程序的速度

问题描述:

我的程序遇到了一个奇怪的错误:头文件减慢了程序的速度。我使用空代码测试头文件(即: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''。相反,它应该是第一个包含在源文件中的文件。 –

通过在.cpp文件中放入一百万个字符串的全局声明,迫使编译器在程序启动时将代码放入一百万个字符串对象中。这是你放慢速度的原因。

当你只使用数组的第一个256点的元素,改变它的大小为256

+0

也许吧。但是,当我用main()中的少量代码逐行运行时,程序最终会变慢,而不是在开始。当我到达'}'时它非常慢。 – user1690220

+1

这是因为所有的100万字符串也必须被破坏,这也需要相当长的时间。 –