请教c函数定义局部变量不要超过12个?
本帖最后由 leicai05 于 2013-11-22 22:07 编辑书中这么说“函数中的局部变量最好不要超过12个”
我是否可以这么理解,这样的函数发生调用的时候,需要使用过多的寄存器保存变量。
这种情况还不如使用全局变量。比如我在发送串口函数的时候。
方式一
void send_news(void)
{
uchar mdata = {0};//定义局部变量
mdata = 0x0a;//数据赋值
mdata = 0x31;
mdata = 0;
mdata = crc(mdata,11);//求和校验
tx_chars(mdata,12);//底层串口发送函数
}
方式二
uchar mdata = {0};//定义全局变量
void send_news(void)
{
mdata = 0x0a;//数据赋值
mdata = 0x31;
mdata = 0;
mdata = crc(mdata,11);//求和校验
tx_chars(mdata,12);//底层串口发送函数
}
这两种方式是不是第二种方式更好,请教大家。
自己顶起,是不是这样分析,局部变量是通过堆栈实现的,太多的局部变量数组会冲掉堆栈。
请高手下结论啊! 看C语言编译器的实现,如KEIL C51的局部变量传递就不是通过堆栈的。
但大多数的嵌入式C编译器都是通过堆栈来传递局部变量的。使用局部变量可以节省内存,开销是进出栈需要耗费额外的指令周期。此外,局部变量过多,也存在堆栈溢出的可能。
在你目前的情况下,用全局变量也是可以的。但是一般情况下,尽量避免,如果要用,建议定义为static型,紧紧只在串口模块内使用。 mcu_lover 发表于 2013-11-23 08:10 static/image/common/back.gif
看C语言编译器的实现,如KEIL C51的局部变量传递就不是通过堆栈的。
但大多数的嵌入式C编译器都是通过堆栈 ...
谢谢建议 寄存器的访问比堆要来的快 , 51中 。 所以局部变量优先分配在寄存器中。 一个函数中的局部变量多了可能会栈溢出。
页:
[1]