8

对于用 C++ 编写的程序,我需要两个包含数据的巨大字符串数组。

它们在头文件中定义如下:

#include <string>
static const string strdataA[30000]={"this is the first line of the data",
    "the second line of data",
    "other stuff in the third line",

向下

    "last line."};
//second array strings
static const string strdataB[60000]={"this is the first line of the data",
    "the second line of data",
    "other stuff in the third line",

向下

    "last line."};

但是当我用 g++ 编译它时,它需要很长时间,以至于我还没有看到它完整。它还使用大约 2 GB 的虚拟内存。所以我把strdataB[]注释掉了,然后程序确实编译了,但是过了很久还是这样。可执行文件只有大约 8 Mb 并且运行良好。

我可以做些什么来加快编译过程?我不介意是否必须更改代码,但我不想使用外部文件来加载。我想要一个数组,因为它在程序中非常适合我。

我在网上某处读到“静态常量”应该可以解决问题,但我从经验中了解到它没有。

非常感谢您的任何建议!

4

3 回答 3

9

你不应该使用std::string它。改用普通的 old const char*

const char * const strdataA[30000] = {
    "one",
    "two",
    //...
};

关键字在static这里不应该有太大的不同。

这样,字符串本身将作为简单的文字存储在只读数据部分中,而数组本身将只是一个指针数组。此外,您避免在运行时运行字符串构造函数/析构函数。

于 2013-03-14T21:57:55.530 回答
3

我相信这些是 GCC 中的已知问题。你没有说你使用的是什么版本的 GCC,也许你应该尝试使用最新的稳定版本的 GCC,看看它是否有改进。

您可能不应该将所有字符串保留在源代码中。您可能应该在启动时从外部文件中加载它们。

于 2013-03-14T21:52:26.863 回答
1

我可以做些什么来加快编译过程?

const char* strdataA ...应该加快编译过程。因为在您当前的版本中,g++ 必须为每个字符串创建巨大的构造函数调用列表。

于 2013-03-14T22:00:14.070 回答