【问题标题】:Performance of methods for free(pointer)?免费(指针)方法的性能?
【发布时间】:2014-09-04 12:00:47
【问题描述】:

这两种方法都有效,但在ptr == NULL 的情况下哪一种更快/性能更好?

void voo()
{    
  str *ptr = NULL;      

  // try to malloc memory and do something

  // leaving methode and free the memory 
  if(ptr != NULL)
  { 
    free(ptr);
    ptr = NULL;
  }
}

如果我离开该方法,是否需要if 查询?无论如何,给free 内存不是一样快吗?

void baa()
{    
  str *ptr = NULL;      

  // try to malloc memory and do something

  // leaving methode and free the memory 
  free(ptr);
  ptr = NULL;
}

【问题讨论】:

  • free (ptr) 你的意思是,对吧?
  • 你为什么要标记 C++?在 C++ 中通常不会使用 malloc/free,而且在大多数情况下,您也不会使用动态分配。
  • 最后的ptr = NULL 也是没有意义的(尽管编译器应该意识到这一点并且不会为它生成任何浪费时间的代码)。
  • 我修改了问题:将prt 换成ptr。如果这是故意的,请回滚。
  • @crashmstr:当然,在新代码中。我在旧代码和成长代码中遇到了这个问题。 (超过 100.000 行代码)。我不能把所有东西都写新!

标签: c++ c pointers malloc free


【解决方案1】:

从 C 标准 7.20.3.2/2 开始,如果 ptrNULLfree(ptr) 什么都不做。

因此,从性能和多余代码的角度来看,对您进行检查是没有意义的。

【讨论】:

  • +1。在超出范围之前将ptr 设置为NULL 也是毫无意义的、嘈杂的和令人困惑的。
  • 明确说明:通常,在释放后将指针设置为 NULL 就可以了。这里没有意义,只是因为ptr的范围有限。
  • @oxygene 将释放的指针设置为 null 通常是没有意义的,因为大多数情况下,它会立即超出范围。 (在 C++ 中,我想delete 的大多数用途都在析构函数中,在这种情况下,将指针设置为 null 是没有意义的。)找到指向该对象的所有其他指针,并将它们设置为 null,可能有用。如果你能找到一种有效的方法。
猜你喜欢
  • 2011-04-09
  • 2021-03-20
  • 2012-12-18
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
相关资源
最近更新 更多