根据C编译器的版本和编译器标志,可以在函数的任何位置初始化变量(据我所知)。
我习惯于将所有变量放在函数顶部,但是有关变量在函数中的任何其他位置定义时内存使用情况的讨论已经开始。
下面我写了两个简短的例子,想知道是否有人能够解释(或验证)内存如何分配。
示例1:变量y在可能的返回语句之后定义,由于这个原因有可能不会使用该变量,据我所知,这并不重要,如果变量放在函数顶部,代码(内存分配)将是相同的。这正确吗?
示例2:变量x在循环中初始化,这意味着该变量的作用域仅限于此循环,但是这个变量的内存使用情况如何?如果将其放置在函数顶部,或者只是在函数调用时在堆栈上初始化,是否会有所不同?
编辑:总结一个主要问题: 减少变量的范围或更改第一次使用的位置(因此在任何其他位置而不是顶部)是否对内存使用产生影响?
代码示例1:
我习惯于将所有变量放在函数顶部,但是有关变量在函数中的任何其他位置定义时内存使用情况的讨论已经开始。
下面我写了两个简短的例子,想知道是否有人能够解释(或验证)内存如何分配。
示例1:变量y在可能的返回语句之后定义,由于这个原因有可能不会使用该变量,据我所知,这并不重要,如果变量放在函数顶部,代码(内存分配)将是相同的。这正确吗?
示例2:变量x在循环中初始化,这意味着该变量的作用域仅限于此循环,但是这个变量的内存使用情况如何?如果将其放置在函数顶部,或者只是在函数调用时在堆栈上初始化,是否会有所不同?
编辑:总结一个主要问题: 减少变量的范围或更改第一次使用的位置(因此在任何其他位置而不是顶部)是否对内存使用产生影响?
代码示例1:
static void Function(void){
uint8_t x = 0;
//code changing x
if(x == 2)
{
return;
}
uint8_t y = 0;
//more code changing y
}
代码示例 2
static void LoopFunction(void){
uint8_t i = 0;
for(i =0; i < 100; i ++)
{
uint8_t x = i;
// do some calculations
uartTxLine("%d", x);
}
//more code
}