关于static静态变量的理解以及C中的内存区的分配
2016-10-07 15:57
886 查看
static静态变量
1、局部变量:在一个函数中,定义一个static的静态变量,它是存储在静态存储区。该变量只是在该函数第一次运行时完成初始化,若再次在调用这个函数,它不会再执行这句语句。它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。
这个程序的输出结果为:
9
8
7
6
5
4
3
2
1
0
C中的内存区的分配
1、栈-由编译器自动分配、释放。
2、堆-由程序员分配、释放。若程序员不释放,程序结束时候有操作系统自动回收。
3、全局/静态存储区:全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
4、专门存放常量的区域。
引用: http://www.cnblogs.com/JCSU/articles/1051579.html
1、局部变量:在一个函数中,定义一个static的静态变量,它是存储在静态存储区。该变量只是在该函数第一次运行时完成初始化,若再次在调用这个函数,它不会再执行这句语句。它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。
#include <stdio.h> int display() { static von = 10; von--; return(von); } main() { int i; for(i=0;i<10;i++) { printf("\r\n%d\r\n",display()); } }
这个程序的输出结果为:
9
8
7
6
5
4
3
2
1
0
2、全局变量:静态全局变量和非静态的全局变量。两种变量都是静态存储方式。 ①非静态全局变量:作用域为整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。②静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它,它不能extern到其他源文件。 3、静态函数(内部函数):在函数的返回类型前加上关键字static,函数就别定义为静态函数。函数定义和声明在默认情况下是extern的,但是静态函数只是在声明它的文件中可见,该函数的作用仅限于本.c文件。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
C中的内存区的分配
1、栈-由编译器自动分配、释放。
2、堆-由程序员分配、释放。若程序员不释放,程序结束时候有操作系统自动回收。
3、全局/静态存储区:全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
4、专门存放常量的区域。
//main.cpp int a = 0; // 全局初始化区 char *p1; // 全局未初始化区 void main() { int b; // 栈区 char s[] = "abc"; // 栈区 char *p2; // 栈区 char *p3 = "123456"; // p3在栈区; "123456\0" 在常量区, static int c =0; // 全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); // 分配得来的10和20字节的区域就在堆区 strcpy(p1, "123456"); // "123456\0" 放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 }
引用: http://www.cnblogs.com/JCSU/articles/1051579.html
相关文章推荐
- IOS初学,关于内存的使用和释放,以及对其方法的理解
- java中内存分配以及static的用法
- 黑马程序员-面向对象的理解以及Objective-C方法和对象分配内存的学习笔记
- 关于JAVA中的static方法、并发问题以及JAVA运行时内存模型
- 关于构造函数析构函数以及成员变量内存分配顺序的一些问题
- 【JAVA基础】关于JAVA中的static方法、并发问题以及JAVA运行时内存模型
- Java基础-方法区以及static的内存分配图
- Static 以及内存分配 /java初学
- 关于数组的复习以及定义一个类(关于内存的理解)
- C语言里的内存分配以及堆栈的理解
- 关于JAVA中的static方法、并发问题以及JAVA运行时内存模型
- 关于heap内存分配问题追踪以及对引发coredump原因的思考
- 理解JVM之内存分配以及分代思想实现
- 关于JAVA中的static方法、并发问题以及JAVA运行时内存模型
- 关于JAVA中的static方法、并发问题以及JAVA运行时内存模型
- Java基础-方法区以及static的内存分配图
- 当数组元素是应用类型的时候,关于内存分配的理解误区
- 关于#pragma pack()和内存分配的一点理解
- 动态存储器分配:内存动态分区分配方式的理解以及模拟(一)
- 关于继承时内存分配的理解