2014-09-04 75 views
1

这两种方法都能正常工作,但在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; 
} 
+0

'免费(ptr)'你的意思是吧? – 2014-09-04 12:02:35

+8

为什么要标注C++?您通常不会在C++中使用'malloc' /'free',并且在大多数情况下,您不会使用动态分配。 – crashmstr 2014-09-04 12:04:29

+2

最后的'ptr = NULL'也是没有意义的(尽管编译器应该认识到这一点,并且不会为它产生任何浪费时间的代码)。 – 2014-09-04 12:10:30

回答

9

从C标准,7.20.3.2/2,如果ptrNULL然后free(ptr)什么都不做。

因此,无论从性能还是多余的代码角度来看,检查它都是毫无意义的。

+4

+1。在超出范围之前将'ptr'设置为'NULL'也是毫无意义,嘈杂和混乱的。 – unwind 2014-09-04 12:10:44

+2

只是为了明确:通常,free'ing后将指针设置为NULL是很好的。这仅仅是因为'ptr'的有限范围。 – oxygene 2014-09-04 12:14:43

+0

@oxygene将释放的指针设置为空通常是没有意义的,因为大部分时间它会立即超出范围。 (在C++中,我会想象,大多数'delete'的用法都在析构函数中,在这种情况下,将指针设置为null没有意义。)找到指向该对象的所有其他指针,并将它们设置为null,可能会有用。如果你能找到一个有效的方法。 – 2014-09-04 12:59:59