c++ - 在 C++ 中存储巨大的静态变量

标签 c++

我有一串大约 17 kb 长的信息。我的程序不会生成此字符串或将其读入缓冲区 - 数据已经初始化,我希望它在我的代码中按原样编译,就像静态变量一样。此外,我更希望它在我的可执行文件中,而不是存储在项目文件中。我以前从未遇到过这样的问题,解决这个问题的最佳方法是什么?我应该作为资源包括在内,还是直接将大量数据流复制并粘贴到变量中?你会推荐什么?

忘了说,如果重要的话,我正在使用 VisualStudio C++ 2015

最佳答案

GNU 链接器 ld 能够直接将自定义数据作为目标文件的 .data 部分包含在内:

 ld -r -b binary -o example.o example.txt

生成的 example.o 文件定义了符号以访问嵌入数据的开始和结束(只需查看带有 objdump 的文件以了解它们的命名方式).

现在我不知道 Visual Studio 附带的链接器是否具有类似的能力,但我想您可以通过 mingw 或通过 cygwin 使用 GNU 链接器(因为生成的目标文件不会引用标准库你不需要 cygwin 附带的仿真库)。生成的目标文件 apparently can just be added to your sources like a regular source file .

当然,如果数据经常变化,这种手动工作流程就不太好了......

或者,您可以编写一个简单的程序,将文件的内容放入 C 字符串中,例如:

unsigned char const * const data = { 
  0x12, 0x34, 0x56 };

当然已经有这样的程序(xdd),但不知道你是否可以使用。一个潜在的问题是您可以 reach the limit for the length of string literals that way .要解决这个问题,您可以尝试使用(多维)字符数组。

(写这个答案时我发现 this blog post 很有帮助。)

关于c++ - 在 C++ 中存储巨大的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42384643/

相关文章:

c++ - 将库放入 Linux 中的 exe 文件夹中

c++ - Qt 部署的可执行文件打开空白应用程序

c++ - 如何确定 Boost header 是否可以用作仅 header ?

c++ - 使用 MSVC 而非 GCC 编译的模板

c++ - 如何在 openGL 中获取同质屏幕空间坐标

c++ - C++ 编译器一般是 "optimize"malloc 和 free to new and delete 吗?

c++ - valgrind 如何以及何时检测内存泄漏

c++ - 如何使用QVTKWidget

c++ - 如何更改BST树中所有节点的值?

c++回车换行长字符串后跟较短的字符串