繁体   English   中英

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

[英]g++: compiling a huge static 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 编译它时,编译器导致我的系统内存不足。 不幸的是,我只有 4 GB。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM