头文件减慢程序的速度
问题描述:
我的程序遇到了一个奇怪的错误:头文件减慢了程序的速度。我使用空代码测试头文件(即: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岁。 我从来没有遇到过这样奇怪的错误。
答
通过在.cpp文件中放入一百万个字符串的全局声明,迫使编译器在程序启动时将代码放入一百万个字符串对象中。这是你放慢速度的原因。
当你只使用数组的第一个256点的元素,改变它的大小为256
+0
也许吧。但是,当我用main()中的少量代码逐行运行时,程序最终会变慢,而不是在开始。当我到达'}'时它非常慢。 – user1690220
+1
这是因为所有的100万字符串也必须被破坏,这也需要相当长的时间。 –
旁注:用线年底前所有这些空间是什么?另外,很长的执行时间可能与一百万个'std :: string'试图构造? – Shahbaz
全局默认初始化。所以这个数组会被填充空字符串,无论您是否使用它。 (免责声明:我可能对特定类型的初始化错误,但同样的原则也适用)。 – BoBTFish
你不应该在头文件中包含''stdafx.h''。相反,它应该是第一个包含在源文件中的文件。 –