如何处理条件初始化,这是一个好习惯吗?

Vor*_*rac 8 c performance coding-style

我试图在几种可能的做法之间做出决定.比方说,我的函数有许多if()块,它们处理数据,这对它们来说是唯一的.

  • 我应该声明并初始化块内的本地(用于块)数据吗?这是否具有运行时性能成本(由于堆栈中的运行时分配)?

  • 或者我应该在函数入口处声明和/或初始化所有变量,以便在一个可能更快的操作块中完成?

  • 或者我应该在不同的函数中分隔if()块,即使它们只有几行并且在程序中只使用了一行?

或者我是否正在寻找另一个更清洁的选择?这个问题是否能够以当前的一般形式回答?

das*_*ght 8

我应该声明并初始化块内的本地(用于块)数据吗?

绝对:这往往会使程序更具可读性.

这是否具有运行时性能成本(由于堆栈中的运行时分配)?

否:所有分配都是预先完成的 - 堆栈上的空间在进入函数时保留给所有分支中的变量,而不是在输入分支时.而且,这甚至可以节省一些空间,因为编译器可以重用为非重叠分支中的变量分配的空间.

或者我应该在函数入口处声明和/或初始化所有变量,以便在一个可能更快的操作块中完成?

不,这不是更快,可能会稍微浪费一点.

或者我应该在不同的函数中分隔if()块,即使它们只有几行并且在程序中只使用了一行?

这可能会对您的程序的可读性产生负面影响.

  • @Vorac这里没有矛盾 - 所有他都说编译器可以足够聪明地找出非重叠的范围,并且即使没有将声明放在非重叠的块中也可以重用内存.这就是为什么我在我的回答中小心翼翼地说"可以保存",而不是"会保存". (3认同)