假设我在一个程序中遇到一个实例,我会释放一个NULL指针,或者首先检查它是否为NULL并跳过free()
函数调用。
简单地释放NULL指针会更有效吗?我搜索了一下,显然,对于C89之后的实现,释放NULL指针是无害的 - 所以决定归结为效率。
我的假设是,在调用free()
时可能会产生相当大的开销。因此,在调用free()
函数之前,可能需要进行简单的逻辑检查。
tl;博士版,
在调用free()
时,内部发生了什么,这可能会使得在释放之前首先检查或指针是否为NULL效率更高或更低?
答案 0 :(得分:8)
C标准保证调用free(NULL)
是无害的并且没有效果。因此,除非您认为在NULL指针上调用free()
表示您的程序中的其他位置存在逻辑错误,否则没有理由仔细检查它。
答案 1 :(得分:7)
请勿自行检查是否存在空值。无论如何free
已经必须这样做,并且在使用空指针调用时保证不执行任何操作。就这么简单。
答案 2 :(得分:4)
The Open Group specification for free()
声明:
如果
ptr
是空指针,则不会发生任何操作。
这意味着free()
的实现可能会从以下内容开始:
if (ptr == NULL)
return;
这将产生很少的开销。没有保证,但是在进行检查之前,函数可以做很多工作,因此不必自行检查。