我有一串大约 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/