XPerf
语言C++证据

cx-const-by-value — 已测量,仍然提示

状态

提示. 实时时钟 JSONL: cx-const-by-value.jsonl。未进行语料库分流。2026-10-22 的语料库裁定不涵盖此标识。

测量

clang++ -std=c++17 -O2(Apple clang 版本 21.0.0 (clang-2100.1.1.101))。参数情况调用另一个翻译单元中的函数,因此复制是 ABI 所生成的。每一方返回 size + first byte(或 size + first int)。测试程序在经过 3 次预热后,将返回值在 9 个计时轮中求和。校验和匹配。之后的时间保持在 0 以上。

角色情况中位数毫秒操作次数比率
在向量中的一个 int 之后, 常量引用0.1484172000001
在向量中之前的一个 int,按值常量2.47100020000016.649
之后64字节字符串,常量引用0.039792400001
之前64字节字符串,按值常量0.6107094000015.348
在128字节字符串的range-for之后,常量引用0.016042200001
前128 字节字符串的 range-for,按值常量0.3297082000020.553
在 64 位整型向量的 range-for 后,常量引用0.00570880001
之前64 位整型向量的 range-for,按值常量传递0.122083800021.388

相同形状,也高于基准线,在 JSONL 中未重复:一个 23 字节的字符串参数为 16.728×(1.700666 / 0.101667 毫秒,100000 次操作),32 字节 17.504×(1.423625 / 0.081333 毫秒,80000 次),256 字节 22.681×(0.462125 / 0.020375 毫秒,20000 次),4096 字节 59.952×(1.206541 / 0.020125 毫秒,20000 次)。一个 4 整数向量为 16.145×(2.396875 / 0.148458 毫秒,200000 次)。一个 1024 整数向量,访问第一个元素时,为 74.110×(1.120916 / 0.015125 毫秒,20000 次)。

同一文件的 4096 字节触碰,加上了一个易变的零,这样引用循环就不会消失,为 115.971×(1.178958 / 0.010166 毫秒,20000 次)。内联并没有消除那个复制。

限制

这些都保持在标准以下。扫描器仍会标记拼写错误,因为它无法看到长度或正文:

案例前_ms后_ms操作比率
4字符字符串参数0.3038340.3012503000001.009
空向量参数0.3710000.3033343000001.223
64字节字符串,对每个字节求和0.3565830.081708200004.364
4096 字节字符串,每个字节求和0.9803750.76762540001.277
4 字符字符串的 range-for0.0202920.010625400001.910
1024-整数向量,对每个元素求和0.3241250.15191740002.134

匹配器是一行:const std::string / const std::vector<...>(以及 east-const 拼写),其名称后跟 , 或 ),加上 for ( 头部中 : 之前的相同类型。它会遗漏 const auto、下一行的名称、默认参数(=)以及嵌套的 >>。按值传递的非常量参数会被保留:在一个 4096 字节的字符串上,这个复制是 60.510×(1.235375 / 0.020416 毫秒,20000 次操作),它也是函数获取所有权的方式。局部的 const std::string copy = ... 会被保留。

默认保持 hint。这些比率不是通用加速。

解除阻塞

不要仅从这个文件将默认值设置为 error。一个短字符串、一个空向量,或一个读取每个元素的主体都可以抹去差异。在任何默认值更改之前,仍然需要对语料库进行初步筛选。