关闭

浅谈C语言的存储区

标签: c语言存储存储区
239人阅读 评论(1) 收藏 举报
分类:

C语言中存储区大体上分为三个


    

静态存储区:

 静态存储区是用来存储静态变量和全局变量或者常量字符串的位置,在代码中声明一个全局变量,则必须在所有代码块之外声明,它的生命周期从代码开始执行到结束;若在声明一个变量的时候在前面加上static关键字,则说明该变量是个静态变量,他的生命周期是从声明开始到代码运行结束;还有一种存储在静态区的常量,称为字符串常量,如果定义了一个字符串常量则说明它是不可被改变的。

栈区:

栈区是用来存数函数的参数和局部变量,更具体点说是编译器在代码运行是在运行时堆栈上对变量进行内存的分配,内存的分配是连续的,栈区上给变量分配内存的特点就是高速有效,但是栈区的容量有限不能对所有的变量都在栈区上开辟内存空间,如果在栈区上开辟的内存超出了栈区的容量就会产生栈溢出。

堆区:

堆区是留给程序员在需要的时候申请内存空间的时候用的,通常我们用malloc、relloc、new等的函数进行内存的申请,但是要用相应的free、delete等函数对申请到的内存在使用完后进行释放,如果不进行释放的话,所申请的那块内存空间就会被浪费,你不再使用 但是别人也申请不到,堆区的具体由操作系统管理。



举例说明:

<span style="font-size:18px;">#include<stdio.h>
#include<stdlib.h>

int b = 2;     //定义在所有代码块之外  属于全局变量  在静态存储区
static int c = 5;   //静态全局变量   当然也是在静态区
void fun(int m, int n)     //函数的参数  在函数被调用时在运行时堆栈上开辟空间  存储在栈区
{
printf("this is an example!\n");
}
int main()
{
static int a;        //静态变量
    char *p = (char*)malloc(20);   //指针p是个局部变量 在栈区存储 但是它所指向的空间是通过malloc开辟的是在堆区
int x = 2, y = 3;     //局部变量  栈区开辟内存空间
fun(2, 3);       
return 0;
}
</span>





1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7145次
    • 积分:279
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论