C ++字符串文字与const字符串

时间:2010-12-05 22:54:53

标签: c++ string const literals

我知道C / C ++中的字符串文字具有静态存储持续时间,这意味着它们“永远”存在,即只要程序运行。

因此,如果我有一个非常频繁地调用的函数并使用如下字符串文字:

void foo(int val)
{
    std::stringstream s;
    s << val;
    lbl->set_label("Value: " + s.str());
}

其中set_label函数将const std::string&作为参数。

我应该在这里使用const std::string而不是字符串文字还是没有区别?

我需要尽可能减少运行时内存消耗。

编辑:

我的意思是将字符串文字与在某种常量头文件中初始化的const std::string prefix("Value: ");进行比较。

此外,这里的连接返回一个临时的(让我们称之为Value: 42,并将对此临时的const引用传递给函数set_text(),我是否正确?

再次感谢你!

4 个答案:

答案 0 :(得分:9)

您的程序每次都以相同的文字运行。没有更有效的存储形式。将构造一个std :: string,在堆上复制,然后在每次运行函数时释放,这将是完全浪费。

答案 1 :(得分:2)

这将使用更少的内存并运行得更快(如果你的编译器支持它,请使用snprintf):

void foo(int val)
{
    char msg[32];
    lbl->set_label(std::string(msg, sprintf(msg, "Value: %d", val)));
}

要实现更快的实施,请查看C++ performance challenge: integer to std::string conversion

答案 2 :(得分:0)

你将如何构建const std :: string?如果你从一些字符串升级中做到这一点,最后它将只是更糟(或者如果编译器做得很好则相同)。字符串文字不会占用太多内存,也不会占用静态内存,这可能不是那种低级内存。

如果您可以从文件中读取所有字符串文字,并在不再使用字符串时将内存返回给操作系统,则可能有某种方法可以减少内存占用(但它可能会减慢程序的速度)多)。

但在做这类事之前,可能还有很多其他方法可以减少内存消耗。

答案 3 :(得分:0)

将它们存储在某种资源中,并根据需要加载/卸载它们。

相关问题