2014-09-04 69 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