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



我生成了一个约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编译时,编译器会导致我的系统内存不足。不幸的是,我只有4GB。

我想把矢量静态编译到我的可执行文件中(玩具项目,仅供参考),但显然我无法让它工作。我该如何解决此问题?

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

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

当初始化std::字符串时,编译器似乎必须生成对std::string构造函数的调用,以便在堆上分配内存。它似乎不会生成任何类型的循环。。。你可以从后面得到很多汇编语言。

它在初始化整数向量方面做得更好,但与旧的C风格数组相比,这仍然是一个很大的开销。

在C/C++程序中嵌入任意数据也有各种技巧。一些参考文献:

  • 使用gcc-mingw嵌入二进制Blob
  • https://www.fourmilab.ch/xd/

最新更新