[英]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.