C -分支预测和变量声明



据我所知,如果我有一个:

if(case 1)
{
  char x[] = "1";
  printf("%s",x);
}
else if(case 2)
{
  char x[] = "12";
  printf("blah-blah-blahn");
  printf("%s",x);
}

,那么我的编译器将尝试预测代码将进入的分支,这样可以改善执行流程。我可以在这个函数的头部创建我的char x[MAX_SIZE],这样可以避免冗余的声明(如果分支预测器是错误的),但这将使我创建一个比我可能需要的更长的数组…

询问性能:将数组声明移动到函数的头部或将其留在if-else的每个情况下是一个好主意吗?

EDIT:我知道这段代码中的任何性能变化都很小,可能不会被识别出来,但问题是关于主体的。

在您的例子中,char x[]的声明不是多余的,即使它们声明的对象具有相同的名称。但是,由于这些对象具有不同的作用域,因此它们的其他一切都是不同的,包括它们的类型(一个是char[2],另一个是char[3])。

看起来你不需要你的x对象是可写的,所以你可以使用指针,像这样:

char *x;
if (case 1) {
    x = "1";
} else if (case 2) {
    x = "12";
    printf("blah-blah-blahn");
}
printf("%s", x);

这种方法避免了将字符串文字复制到可写内存中,潜在地比一个好的分支预测节省了很多。

就我对你问题的理解而言,虽然,这取决于需求,可能并不总是适用,但你可能应该使用char[Max_Size]作为约定,并符合良好的编程实践编写可读代码

避免冗余也是一个很好的实践。

此外,就你所关心的浪费资源…

这样的情况下可能会更浪费。
fun1(){
char x[10000];
...
}
fun2(){
char x[5000];
...
}
fun3(){
char x[10000];
...
}

而不是简单的char x[MAX_SIZE];

希望有帮助

相关内容

  • 没有找到相关文章

最新更新