gpt4 book ai didi

c++ - std::function 的性能开销是多少?

转载 作者:IT老高 更新时间:2023-10-28 13:22:38 27 4
gpt4 key购买 nike

我在论坛上听说过 std::function<>导致性能下降。这是真的吗?如果属实,是不是性能大幅下降?

最佳答案

确实,在使用 std:function 时必须考虑到性能问题。 std::function 的主要优势,即它的类型删除机制,并不是免费的,我们可能(但不一定必须)为此付出代价。

std::function 是一个封装了可调用类型的模板类。但是,它没有在可调用类型本身上进行参数化,而仅在其返回和参数类型上进行参数化。可调用类型仅在构造时才知道,因此,std::function 不能拥有该类型的预声明成员来保存给其构造函数的对象的拷贝。

粗略地说(实际上,事情比这更复杂)std::function 只能保存一个指向传递给其构造函数的对象的指针,这会引发生命周期问题。如果指针指向的对象的生命周期小于 std::function 对象的生命周期,则内部指针将变为悬空。为了防止这个问题,std::function 可能会通过调用 operator new(或自定义分配器)在堆上复制对象。动态内存分配是人们最常说的std::function所暗示的性能损失。

我最近写了一篇更详细的文章,解释了如何(以及在​​哪里)可以避免支付内存分配的代价。

Efficient Use of Lambda Expressions and std::function

关于c++ - std::function 的性能开销是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057382/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com