伪代码: int a; a = 10; if(somecondition == true) { int b; b = 20; } else { int c; c = 40; }
假设编译器是ads,硬件为arm, int变量为4字节。 这段程序即使经过优化的情况下,ram应该是占多少字节? 分析A: C语言不支持动态分配变量,所以a,b,c在函数进入后,就已经分配好,占用3*4=12个字节。也就是说即使变量b所在分支永远得到不执行,也会分配内存。 分析B: 编译器会根据程序分支的情况,对变量分配进行优化,b,c复用,共用同一内存,所以占用2*4=8字节,也就是说,变量b只在得到执行的情况下,才会分配内存,其方法类似对子函数中变量的处理。
以上两种分析,那种正确?怎么验证? |