C++ 头文件会减慢程序的速度

C++ 头文件会减慢程序的速度,c++,C++,我的程序遇到了一个奇怪的错误:头文件减慢了程序的速度。我用空代码测试头文件(即: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 结果:40秒。 我以前从来没有遇到过这样奇怪的错误。通过在.cpp文件中放入一

我的程序遇到了一个奇怪的错误:头文件减慢了程序的速度。我用空代码测试头文件(即:
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
结果:40秒。
我以前从来没有遇到过这样奇怪的错误。

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


由于您只使用数组的前256个元素,请将其大小更改为256。

旁注:行尾之前的所有空格是什么意思?另外,执行时间长是否与一百万个试图构造的std::string有关?全局变量是默认初始化的。因此,无论您是否使用该数组执行任何操作,该数组都会被空字符串填充。(免责声明:对于特定类型的初始化,我可能是错的,但同样的原则适用)。您不应该在头文件中包含
“stdafx.h”
。相反,它应该是第一个包含在源文件中的文件。另外,如果你真的想要一本“字典”,你应该看看。也许。但是,当我在main()中以很少的代码逐行运行时,程序最终会变慢,而不是在开始时变慢。当我到达“}”时,速度非常慢。这是因为所有一百万个字符串也必须被销毁,这也需要相当长的时间。
#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;        
}
#include "lz.h"  
void main() {}