Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.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++ 删除nullptr-性能开销?_C++ - Fatal编程技术网

C++ 删除nullptr-性能开销?

C++ 删除nullptr-性能开销?,c++,C++,运算符delete检查指针是否为null ptr。在未亲自检查的情况下对nullptr调用delete时,是否存在性能开销 delete ptr; 或 如果ptr为nullptr,上述哪项执行得更快?这肯定是过度优化的情况。在任何现代处理器上,差异只有几纳秒 通过执行检查,代码避免了调用(删除库例程)的开销。在99%的情况下,源代码稍微额外的复杂性(大括号、潜在的打字错误写入!=等)比额外的执行时间更大。不,如果不检查ptr是否为nullptr,则不会有任何开销 如果您手动进行检查,相同的检查

运算符delete检查指针是否为null ptr。在未亲自检查的情况下对nullptr调用delete时,是否存在性能开销

delete ptr;


如果ptr为nullptr,上述哪项执行得更快?

这肯定是过度优化的情况。在任何现代处理器上,差异只有几纳秒


通过执行检查,代码避免了调用(删除库例程)的开销。在99%的情况下,源代码稍微额外的复杂性(大括号、潜在的打字错误写入
!=
等)比额外的执行时间更大。

不,如果不检查
ptr
是否为
nullptr
,则不会有任何开销

如果您手动进行检查,相同的检查会执行两次,尽管与系统调用的成本相比,这可以忽略不计,但是如果
ptr
不为空,您可以预期

如果ptr为nullptr,上述哪项执行速度更快


假设您的检查没有得到优化,那么顶部的检查会更快。如果它确实得到了优化,两者都不会更快。把它留给编译器。

像往常一样,它取决于编译器

我使用MSVC,它将这两行代码编译成完全相同的代码


规则规定,如果指针为null,则删除无效。所以,如果你不检查,编译器必须要。

除了冗余之外,潜在的速度差异就更糟了。如果你已经使用C++ 11,那么也许根本就不考虑使用删除,而是使用智能指针。C++ 11不需要。Boost已经有好几年的智能指针了。当然但是当它们就在你手下时,你就没有理由在大多数标准情况下不使用它们了:)在调用库
::operator delete()
之前,检查必须在生成的代码中,因为如果指针为
null
,编译器也不允许调用析构函数。
if (ptr != nullptr) delete ptr;