C语言 局部变量和自动变量的区别是什么?请简单举例子说明一下 谢谢

2025-01-02 03:26:12
推荐回答(1个)
回答1:

局部变量包括自动变量和静态局部变量,静态局部变量是编译器在数据段或者bss段分配的,如果没有初值则一般放在bss段,由程序加载器将其内存清零;而自动变量是在栈上,函数调用结束时,栈会被回收,自动变量也就消亡了,再次分配给其他自动变量时不会自动清零,所以如果没有初值就是垃圾数据。举个例子:static int a=10;那么你的可执行文件里面就会有四个字节里面存放了数字10;
{ int a=10;}这样定义的话你的可执行文件中并没有存放数字10的四个字节,而是类似如下代码:
sub $4,%esp;mov $0xa,(%esp);意思是再栈上分配四个字节(不清零),然后把数字10放进去。不知道我说清楚了没,不懂的话再问我。