【发布时间】:2014-06-30 17:01:20
【问题描述】:
我正在尝试一个 C++ 程序,其中我已将 2D 向量初始化为字符串。向量很大。
vector< vector <string> InVector ={ {"Alpha1","Beta1","10.23","13.20"},
{"Alpha2","Beta2","30.23","13.20"},
..
..
};
向量 InVector 很大——在我的例子中是 1000x4。
当我编译程序时,编译时间太长了;但是,如果没有固定的向量初始化,它的编译速度非常快。使用 -O2 或 O3 优化时间太多了。
这是 -ftime-report 的输出
总计:79.02 0.67 80.53
314571 KB
知道如何改进编译时间。
我应该将它初始化为数组,然后将其转换为向量吗?或者有没有其他方法可以替代这种方法。
PS:如果我从文件中读取此向量,则没有问题。
【问题讨论】:
-
请记住:编译是您只执行一次(或者无论如何很少)的事情,但您将多次运行程序(可能)。如果将编译时间加起来,与运行时初始化所用的时间相比,你认为哪个会更多?大多数情况下的答案是,运行时的初始化在几次之后将是最大的。长编译时间比长运行时更好。
-
如果您专门禁用此编译单元的优化会发生什么?
-
您使用的是哪个确切的编译器和版本?在哪个系统上?
-
为什么要将大量数据硬编码到可执行文件中?从文件中读取它是一件轻而易举的事。请记住,“常量不是,变量不会”。
-
如果我的程序需要多花 2 分钟才能启动(基于“5 次”评论),我很乐意换取 10 分钟的额外编译时间。一个建议:把这个数据结构放在一个你很少编译的文件中,也许是一个编译单元,所以它只影响从头开始构建,而不是你的增量构建。