【问题标题】:String literals causing small memory leak?导致小内存泄漏的字符串文字?
【发布时间】:2012-03-28 19:02:10
【问题描述】:

我有一个调用了数千次的 C 函数,我注意到它是唯一可能内存泄漏的地方。我使用 Valgrind 和 Totalview 的 MemoryScape 来检查泄漏,但他们什么也没说,但是当应用程序在 AIX 6.1 上运行时,就会出现逐渐泄漏。

注意:我正在为此使用“无泄漏”SAP RFC SDK,并与开发人员交谈过,他们说我使用的库是 100% 无泄漏的......所以不是这样......

代码大致如下,每小时调用数千次......

int writeMessage(message msg){
...
...
header = ItCreate( "HEADER", HEADER_LEN, 0, 0 );
body = ItCreate( "DATA", DATA_LEN, 0, 0 );
...
...
ItDelete(it_header);
ItDelete(it_body);
...
}

像“HEADER”和“DATA”这样的字符串文字会导致我的小泄漏吗?愚蠢的问题,但我宁愿要求安全。

如果我在这种特定情况下将它们声明为 CONSTANTS 会有什么不同?

感谢您的帮助,非常感谢

【问题讨论】:

  • 您粘贴的一小段代码看起来不错。没有理由改变它。
  • 你确定这是泄漏?不只是消耗更多的内存吗?刺痛文字不会导致泄漏。
  • 命名略有不同(header vs it_header),但我们可以假设这是一个错字吗?顺便说一句:你怎么知道有内存泄漏。只看top的Vsize?
  • 您粘贴了不完整的代码。修复它。
  • 哎呀....一个错字....是的,应该是 it_header 等....thnx

标签: c


【解决方案1】:

没有。字符串文字具有静态存储持续时间,因此它的存储在程序启动之前被保留,它的生命周期是程序的整个执行。

【讨论】:

    【解决方案2】:

    答案是,但这取决于 ItCreate 的作用。粘贴ItCreate函数代码。

    【讨论】:

      【解决方案3】:

      字符串文字本身不分配或释放内存,因此不能泄漏。

      声明它们const 不会改变任何东西。你的问题在别处。

      【讨论】:

        【解决方案4】:

        像“HEADER”和“DATA”这样的字符串文字是否会导致我的 小泄漏?

        没有。

        【讨论】:

          猜你喜欢
          • 2011-06-12
          • 1970-01-01
          • 2012-06-15
          • 2017-05-09
          • 2014-04-30
          • 1970-01-01
          • 2011-11-09
          • 1970-01-01
          • 2011-08-29
          相关资源
          最近更新 更多