Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自由(指针)方法的性能?_C++_C_Pointers_Malloc_Free - Fatal编程技术网

C++ 自由(指针)方法的性能?

C++ 自由(指针)方法的性能?,c++,c,pointers,malloc,free,C++,C,Pointers,Malloc,Free,这两种方法都可以工作,但在ptr==NULL的情况下,哪种方法更快/性能更好 如果我离开该方法,是否需要if查询?在任何情况下,释放内存的速度都不一样吗 void baa() { str *ptr = NULL; // try to malloc memory and do something // leaving methode and free the memory free(ptr); ptr = NULL; } 根据C标准7.20.3.2/

这两种方法都可以工作,但在ptr==NULL的情况下,哪种方法更快/性能更好

如果我离开该方法,是否需要if查询?在任何情况下,释放内存的速度都不一样吗

void baa()
{    
  str *ptr = NULL;      

  // try to malloc memory and do something

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

根据C标准7.20.3.2/2,如果ptr为NULL,则freeptr不做任何操作


因此,从性能和多余代码的角度检查这一点是毫无意义的。

来自C标准,7.20.3.2/2,如果ptr为NULL,那么freeptr什么也不做


因此,从性能和多余代码的角度来看,这是毫无意义的。

免费PTR,你是说,为什么?为什么你要标记C++?在C++中,通常不使用MalC/C,在大多数情况下,你也不会使用动态分配。最后的PTR=NULL也是没有意义的,尽管编译器应该意识到这一点,而不为它生成任何浪费时间的代码。我已经修改了问题:交换PTR用于PTR。如果这是有意的,请回滚。@crashmstr:当然,在新代码中。我在老代码和成熟代码中遇到了这些问题。超过100.000行代码。我不能写每一件新东西!你是说免费的PTR,对吗?为什么你要标记C++?在C++中,通常不使用MalC/C,在大多数情况下,你也不会使用动态分配。最后的PTR=NULL也是没有意义的,尽管编译器应该意识到这一点,而不为它生成任何浪费时间的代码。我已经修改了问题:交换PTR用于PTR。如果这是有意的,请回滚。@crashmstr:当然,在新代码中。我在老代码和成熟代码中遇到了这些问题。超过100.000行代码。我不能写每一件新东西+1.在ptr超出范围之前将其设置为NULL也是毫无意义的、嘈杂的和令人困惑的。只是为了明确起见:一般来说,在释放后将指针设置为NULL是可以的。这里没有意义,只是因为ptr的作用域有限。@oxygene将释放的指针设置为null通常是没有意义的,因为大多数时候,它会立即超出作用域。在C++中,我想大多数删除的用法都在析构函数中,在这种情况下,将指针设置为null是没有意义的。找到指向该对象的所有其他指针并将其设置为null可能会很有用。如果你能找到一个有效的方法。在ptr超出范围之前将其设置为NULL也是毫无意义的、嘈杂的和令人困惑的。只是为了明确起见:一般来说,在释放后将指针设置为NULL是可以的。这里没有意义,只是因为ptr的作用域有限。@oxygene将释放的指针设置为null通常是没有意义的,因为大多数时候,它会立即超出作用域。在C++中,我想大多数删除的用法都在析构函数中,在这种情况下,将指针设置为null是没有意义的。找到指向该对象的所有其他指针并将其设置为null可能会很有用。如果你能找到一个有效的方法。
void baa()
{    
  str *ptr = NULL;      

  // try to malloc memory and do something

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