C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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
}@H_404_25@ 
 

代码示例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
}@H_404_25@

解决方法

过去在旧版本的C中需要这样,但现代编译器放弃了这一要求.只要他们在第一次使用时知道变量的类型,编译器就会获得所需的所有信息.

编译器决定如何在自动存储区域中分配内存.实现不仅限于为每个变量声明一个单独位置的方法.允许它们重用超出范围的变量的位置,以及在某个点之后不再使用的变量.

在第一个示例中,允许变量y使用以前由变量x占用的空间,因为y的第一个使用点是在x的最后一个使用点之后.

在第二个示例中,循环中用于x的空间可以重用于您可以在//更多代码区域中声明的其他变量.

大佬总结

以上是大佬教程为你收集整理的C中函数和变量的内存分配全部内容,希望文章能够帮你解决C中函数和变量的内存分配所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。