我有大量这样的 C 结构实例:
struct mystruct
{
/* ... */
unsigned flag: 1;
/* ... */
};
flag
最初为 0,但在退出某个函数时必须为 1。
最简单的实现是:
void set_flag(struct mystruct *sp)
{
sp->flag = 1U;
}
但是这样做对性能的可能影响是什么:
void set_flag(struct mystruct *sp)
{
if (sp->flag == 0U)
{
sp->flag = 1U;
}
}
我希望避免写入主存储器。第一个版本总是进行写入,第二个版本仅在尚未设置标志的情况下执行写入,但在绝大多数情况下,标志已经设置。
还有哪些其他因素(例如分支预测)可能会影响性能?
到目前为止,我已经看到了速度的小幅提升,我希望随着数据集变得更大,它会变得更加显着。
对于大型数据集,这种变化是否存在使程序变慢的风险,如果是这样,在什么情况下会发生这种情况?