语言C证据
cp-struct-by-value — 已测量,仍然提示
状态
提示。挂钟 JSONL:cp-struct-by-value.jsonl。未进行语料分类。2026-10-22 的语料裁决不涵盖此标识符。
测量
clang 21.0.0,-std=c11 -O2。被调用者在另一个翻译单元中。该记录有八个 int 字段和 unsigned char pad[480](sizeof 512)。双方都调用该函数,并将两个字段加上第一个和最后一个填充字节加入一个易变的累加器中。11 次的中值。
| 角色 | 情况 | 中位数毫秒 | 操作次数 | 比率 |
|---|---|---|---|---|
| 之后 | pass_pointer | 0.152 | 128000 | 1 |
| 之前 | pass_by_value | 1.864 | 128000 | 12.263 |
在一个翻译单元中,一个静态的 noinline 对,使用相同的记录和相同的 128000 次调用,耗时为 0.153 毫秒,而不是 0.158 毫秒(比率 0.968)。编译器移除了拷贝。这不是普遍的加速。
当参数是 struct Name x 且没有 * 时,扫描器会触发,该结构体在同一文件中较早定义,它理解的成员下限至少为 512 字节,并且至少有四个这样的字段。该下限使用 LP64 宽度(int 4,long 和指针 8)并跳过嵌套类型、位字段以及其他它不理解的成员,因此可能会遗漏较大的记录。在重复测试中,一个 320 字节的记录为 5.848×,一个 448 字节的记录为 6.781×,因此这些大小不匹配。
解阻条件
不要仅凭这个文件将默认值设置为 error。同一文件的静态函数、冷调用或低估的记录大小启发式都可能抹去差异。在进行任何默认值更改之前,仍然需要进行语料筛选。