C中函数和变量的内存分配
依赖于C编译器和编译器标志的版本,可以在函数中的任何位置初始化变量(据我所知).
我习惯将所有变量放在函数的顶部,但讨论开始时关于变量的内存使用,如果在函数的任何其他位置定义的话. 下面我写了两个简短的例子,我想知道是否有人能解释我(或验证)如何分配内存. 示例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 } 解决方法
过去在旧版本的C中需要这样,但现代编译器放弃了这一要求.只要他们在第一次使用时知道变量的类型,编译器就会获得所需的所有信息.
编译器决定如何在自动存储区域中分配内存.实现不仅限于为每个变量声明一个单独位置的方法.允许它们重用超出范围的变量的位置,以及在某个点之后不再使用的变量. 在第一个示例中,允许变量y使用以前由变量x占用的空间,因为y的第一个使用点是在x的最后一个使用点之后. 在第二个示例中,循环中用于x的空间可以重用于您可以在//更多代码区域中声明的其他变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |