簡體   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