Hasty Briefsbeta

双语

The Cost of a Closure in C: The Rest

5 months ago
  • #C
  • #closures
  • #performance
  • 文章重新评估了C和C++闭包实现的性能基准,新增了'纯C函数'测试类别
  • 新增基准测试类别包括'普通函数'、'普通函数(Rosetta代码)'、'普通函数(静态)'和'普通函数(线程局部)',每类具有不同的性能特征
  • 性能分析表明,与直接变量访问相比,间接加载(如通过指针)会显著降低性能
  • 当类型信息保留时,Lambda表达式(及提议的'捕获函数')表现最佳,但C语言的类型擦除会带来性能损耗
  • 使用'static'或'thread_local'变量传递上下文会产生性能损失,其中'thread_local'表现尤为糟糕
  • GNU嵌套函数性能低下,这对其在ISO C标准中的可行性提出了质疑
  • 关键结论包括:类型保留闭包的优势、类型擦除的缺陷,以及'static'和'thread_local'的性能代价
  • 实验配置为在M1芯片MacBook Pro上对13类C/C++代码进行150次基准测试重复