我已经生成了一个大约117000个英文单词的排序列表,我已将其放入C ++头文件中的std::vector<std::string>
,如下所示:
#ifndef WORDS_HPP
#define WORDS_HPP
#include <vector>
#include <string>
const std::vector<std::string> words{
"a",
"a\'s",
"aa",
"aa\'s",
"aaa",
/* >100k lines omitted */
"zyuganov",
"zyuganov\'s",
"zzz"
};
#endif
当将这个怪物包含在.cpp文件中并使用g ++(Debian 4.9.2-10)4.9.2编译时,编译器会导致我的系统内存不足。不幸的是,我只有4 GB。
我想将矢量静态编译到我的可执行文件(玩具项目,FYI)中,但显然我无法使其工作。我该如何解决这个问题?
答案 0 :(得分:1)
正如R Shau所说,这是一个很好的解决方案:
char const* words [] = { ... };
似乎在初始化std :: string时,编译器必须生成对std :: string构造函数的调用,以便可以在堆上分配内存。它似乎没有产生任何类型的循环...你得到了很多汇编语言。
初始化一个整数向量确实好得多,但是仍然比旧的C风格数组要大很多。
还有各种技巧可以将任意数据嵌入到C / C ++程序中。一些参考文献: