g ++:编译一个巨大的静态std :: vector

时间:2016-05-11 17:19:18

标签: c++ g++

我已经生成了一个大约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)中,但显然我无法使其工作。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

正如R Shau所说,这是一个很好的解决方案:

char const* words [] = { ... };

似乎在初始化std :: string时,编译器必须生成对std :: string构造函数的调用,以便可以在堆上分配内存。它似乎没有产生任何类型的循环...你得到了很多汇编语言。

初始化一个整数向量确实好得多,但是仍然比旧的C风格数组要大很多。

还有各种技巧可以将任意数据嵌入到C / C ++程序中。一些参考文献:

相关问题