在C ++中存储大量静态变量

时间:2017-02-22 06:56:53

标签: c++

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

忘记提及,如果重要的话,我正在使用VisualStudio C ++ 2015

1 个答案:

答案 0 :(得分:3)

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

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

生成的example.o文件已定义符号以访问嵌入数据的开始和结束(只需查看包含objdump的文件即可查看它们的命名方式。

现在我不知道Visual Studio附带的链接器是否具有相似的能力,但我猜你可以通过mingw或cygwin使用GNU链接器(因为生成的目标文件不会引用标准的lib你不需要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。为了解决这个问题,你可以尝试一个(多维)char数组。

(写这个答案时我发现this blog post非常有用。)