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编译时,编译器会导致我的系统内存不足。不幸的是,我只有4GB。
我想把矢量静态编译到我的可执行文件中(玩具项目,仅供参考),但显然我无法让它工作。我该如何解决此问题?
正如R Shau所说,这是一个很好的解决方案:
char const* words [] = { ... };
当初始化std::字符串时,编译器似乎必须生成对std::string构造函数的调用,以便在堆上分配内存。它似乎不会生成任何类型的循环。。。你可以从后面得到很多汇编语言。
它在初始化整数向量方面做得更好,但与旧的C风格数组相比,这仍然是一个很大的开销。
在C/C++程序中嵌入任意数据也有各种技巧。一些参考文献:
- 使用gcc-mingw嵌入二进制Blob
- https://www.fourmilab.ch/xd/
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 在linux上调试巨大的C++项目
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 巨大的静态数组与函数内的本地数组
- g++:编译一个巨大的静态std::vector
- CUDA cudaMalloc在运行带有巨大静态数组的内核后失败
- 以合理的编译时间静态初始化巨大的uint8_t数组
- 如何在Objective-C中包装一个巨大的静态c++库
- 使用VS2005编译时巨大的静态库文件,使用gcc编译时正常大小