当前位置: 首页 > 知识库问答 >
问题:

我可以让std::string使用更少的内存吗?

祁正浩
2023-03-14

在开始之前,我需要说明我的应用程序使用了大量的字符串,这些字符串平均来说非常小,并且一旦创建就不会改变。

在Visual Studio 2010中,我注意到std::string的容量至少为30。即使编写std::string str=“test”;,str的容量也是30。函数str.shrink_to_fit()对此没有任何作用,尽管存在一个与std::vector同名的函数,并按预期工作,即减小容量,使容量==size。

    null

共有1个答案

向泽语
2023-03-14
  1. 您的std::string实现很可能使用了某种形式的短字符串优化,导致较小字符串的大小固定,而对shrink_to_fit没有影响。请注意,shrink_to_fit对于实现是非绑定的,所以这实际上是符合的。
  2. 您可以使用向量 来获得更精确的内存管理,但会丢失std::string的一些附加功能。您还可以编写自己的字符串包装器,该包装器在内部使用向量
 类似资料:
  • 来自标准::set_new_handler 每当内存分配尝试失败时,分配函数都会调用new-handler函数。它的预期目的有三个: 使更多内存可用 终止程序(例如,通过调用 std::terminate) 抛出类型 std::bad_alloc 或派生自 std::bad_alloc 的异常 以下超载保证会有什么影响吗?

  • 这种思考方式(静态+动态对于每个字符串是它占用的全部内存)正确吗? 也就是说,如果我有一个Std::string向量,并且我也想计算该向量的所有内存,我需要做同样的事情:我把向量的初始/静态大小加到动态部分,这意味着一个字符串占用的总内存,就像上面对向量中的每个字符串所做的那样? 总而言之,这是我的“缓存”占用的正确内存量吗? 对于每个-我需要添加,另外对于每个-添加??

  • 我正在使用Nodejs。我计划增加Nodejs应用程序的内存限制。 在谷歌上搜索时,我发现了这篇文章:增加节点。js内存限制。 作者说他的服务器只有8GB的物理内存,但他的Nodejs进程使用的是28GB的内存。我假设它正在使用物理交换内存。文章还提到,一个著名的Nodejs框架的开发人员为他的Nodejs使用了15GB的内存限制。 我试图从其他编程语言中搜索一些示例。在Java中,将交换内存用于

  • 调用clear方法时,内存似乎减少了。然而,从其他答案来看,似乎< code>clear方法从未收缩过< code>HashMap。那么为什么内存会减少呢?

  • 问题内容: 我有一个表,其中通过不存在的CSS类通过jQuery显示/隐藏整列: 有了这个DOM,我可以通过jQuery在一行中完成此操作: 这很好用,但是使用未定义的CSS类是否有效?我应该为此创建一个空类吗? 是否有任何副作用或有更好的方法来做到这一点? 问题答案: “ CSS类”是用词不当;是您分配给HTML元素的属性(或就脚本而言的属性)。换句话说,你在你的情况下,“目标”类HTML,CS