【C语言】【unix c】静态变量和自动变量的区别
来源:互联网 发布:广东毕业生就业数据 编辑:程序博客网 时间:2024/05/16 10:34
代码: #include <stdio.h> #include <sys/types.h> #include <unistd.h> void count(void) { static int i = 1;//默认就是auto类型的,在函数结束的时候,函数的栈桢释放,i也就释放了 //这里加static后,i所在的存储地方由栈变为数据段,每次运行该函数i是已经确认了的,不变的 //但是这里的作用域还是得区别的 //全局变量的存储地方也是数据段 printf("++i = %d\n", ++i); printf("i address:%p\n", &i); return; } int main(void) { int i; for(i = 0; i < 5; i++) { count(); } getchar(); return 0; } 自动变量: 命令: tarena@ubuntu:~/day/day26$ gcc memory.c 命令: tarena@ubuntu:~/day/day26$ ./a.out 结果 pid:4157 ++i = 2 i address:0xbf83bd6c ++i = 2 i address:0xbf83bd6c ++i = 2 i address:0xbf83bd6c ++i = 2 i address:0xbf83bd6c ++i = 2 i address:0xbf83bd6c 命令: tarena@ubuntu:~/day/day26$ cat /proc/4157/maps 结果: 08048000-08049000 r-xp 00000000 08:08 1055618 /home/tarena/day/day26/a.out 08049000-0804a000 r--p 00000000 08:08 1055618 /home/tarena/day/day26/a.out 0804a000-0804b000 rw-p 00001000 08:08 1055618 /home/tarena/day/day26/a.out b7526000-b7527000 rw-p 00000000 00:00 0 b7527000-b76c6000 r-xp 00000000 08:08 4991391 /lib/i386-linux-gnu/libc-2.15.so b76c6000-b76c8000 r--p 0019f000 08:08 4991391 /lib/i386-linux-gnu/libc-2.15.so b76c8000-b76c9000 rw-p 001a1000 08:08 4991391 /lib/i386-linux-gnu/libc-2.15.so b76c9000-b76cc000 rw-p 00000000 00:00 0 b76df000-b76e3000 rw-p 00000000 00:00 0 b76e3000-b76e4000 r-xp 00000000 00:00 0 [vdso] b76e4000-b7704000 r-xp 00000000 08:08 4991371 /lib/i386-linux-gnu/ld-2.15.so b7704000-b7705000 r--p 0001f000 08:08 4991371 /lib/i386-linux-gnu/ld-2.15.so b7705000-b7706000 rw-p 00020000 08:08 4991371 /lib/i386-linux-gnu/ld-2.15.so bf81c000-bf83d000 rw-p 00000000 00:00 0 [stack] 分析: 观察可以发现:自动变量存在栈里面,在每次调用函数的时候原变量的数据不会被保存,即定义好自动变量后,变量放在栈头,在该变量使用后栈指针向上移动,也就是该变量清空 静态变量: 命令: tarena@ubuntu:~/day/day26$ gcc memory.c 命令: tarena@ubuntu:~/day/day26$ ./a.out 结果: pid:4166 ++i = 2 i address:0x804a01c ++i = 3 i address:0x804a01c ++i = 4 i address:0x804a01c ++i = 5 i address:0x804a01c ++i = 6 i address:0x804a01c 命令: tarena@ubuntu:~/day/day26$ cat /proc/4166/maps 结果: 08048000-08049000 r-xp 00000000 08:08 1055618 /home/tarena/day/day26/a.out 08049000-0804a000 r--p 00000000 08:08 1055618 /home/tarena/day/day26/a.out 0804a000-0804b000 rw-p 00001000 08:08 1055618 /home/tarena/day/day26/a.out b757e000-b757f000 rw-p 00000000 00:00 0 b757f000-b771e000 r-xp 00000000 08:08 4991391 /lib/i386-linux-gnu/libc-2.15.so b771e000-b7720000 r--p 0019f000 08:08 4991391 /lib/i386-linux-gnu/libc-2.15.so b7720000-b7721000 rw-p 001a1000 08:08 4991391 /lib/i386-linux-gnu/libc-2.15.so b7721000-b7724000 rw-p 00000000 00:00 0 b7737000-b773b000 rw-p 00000000 00:00 0 b773b000-b773c000 r-xp 00000000 00:00 0 [vdso] b773c000-b775c000 r-xp 00000000 08:08 4991371 /lib/i386-linux-gnu/ld-2.15.so b775c000-b775d000 r--p 0001f000 08:08 4991371 /lib/i386-linux-gnu/ld-2.15.so b775d000-b775e000 rw-p 00020000 08:08 4991371 /lib/i386-linux-gnu/ld-2.15.so bfcf6000-bfd17000 rw-p 00000000 00:00 0 [stack] 分析: 静态变量/全局变量是存在数据段中的,每次调用不会清空数据
阅读全文
0 0
- 【C语言】【unix c】静态变量和自动变量的区别
- C语言 静态变量与自动变量的区别
- C语言中的静态变量和普通变量的区别
- C语言动态变量和静态变量的区别
- C语言的中的静态变量和局部变量(自动变量)
- C语言静态变量和参数变量
- 【C语言】【unix c】变量和常量
- C语言再学习之:局部变量,局部静态变量,全局变量和全局静态变量的区别
- C语言的静态变量
- 【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别
- C语言 静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- Android实例:多线程文件下载+在线音乐播放+清除下载文件
- EL表达式
- <8/18>集训日记
- 使用Vitural Box安装Ubuntu server版本报错‘无法安装busybox-initramfs’
- 拼积木问题
- 【C语言】【unix c】静态变量和自动变量的区别
- 内存管理
- 叶俊:从佛说法制的十大好处谈到企业的制度与人情
- 保持nodejs健状性,异步函数错误处理方法Domain与try.catch的区别
- Linux系统squid服务
- 【C语言】【unix c】malloc的实现机制(缓冲机制)
- JAVA编程思想 第2章习题解答
- 跨越编程语言界限(四)
- KHL 001 11-计算机-本职-前台 CSS选择器