我知道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()
,我是否正确?
再次感谢你!
答案 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)
将它们存储在某种资源中,并根据需要加载/卸载它们。