#include<stdio.h>
#include<stdlib.h> //程序代码指令,define定义的常量---代码区(只读)
//全局(关键)变量/常量,静态(关键)变量/常量,常量字符串---静态区
//静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。
//局部变量---栈区
//栈区上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。
//由malloc或者realoc,calloc分配的内存区域---堆区
//堆区其生命周期由free决定。 #define PI 3.14 // //全局变量
int a = ;
int b[] = { , , , , };
int const c = ; void run2(); void main(){
int num = ;
//对于int num = 10;的理解
//int 数据类型 编译器预算对象(变量)num分配4个字节内存空间大小
//num是内存中一段内存空间的标识(相当于门牌号),
//10 才是存储在这段内存空间里的数据
//详细的来说,“int num=10;”这段字符存储在代码区,数据10存储在栈区 //验证局部常量是否存储在栈区
run2();
//经过内存观察,开始局部常量cde的内存空间的数据是2
//当run2()函数执行完毕,局部常量cde的内存空间的数据发生变化
//因为静态区的内容在总个程序的生命周期内都存在,所以判断局部常量存储在栈区 char *p = "asdfadsf";//"asdfadsf"是字符串常量,在静态区,只读
//指针p是临时变量,在栈区
//验证 "asdfadsf" 只读
//*p = 'a';//编译不报错
printf("%s\n", p);//运行报错--“写入位置 0x001B692C 时发生访问冲突。”,由此证明"asdfadsf"是字符串常量,只读 //堆只能是malloc或者realoc,calloc,分配的内存才是堆
//例如以下代码
void *p1 = malloc(sizeof(int)* );//malloc(sizeof(int)* 1024);分配的内存就是堆区,但是指针p1是在栈区
//堆的使用情况:①无法确定需要内存的大小;②需要的内存很大
//堆的注意点:堆和栈不同,堆的内存大小是由程序员分配的,必须由程序员手动释放(free(p1););
//对于栈来说,栈的内存大小由系统分配(栈的极限大约是1M,非常小),所以栈的内存空间是由系统回收的 //堆的内存大小是由程序员分配的,理论上可以占据系统中所有的内存(甚至能抢占栈的内存空间)
//因为栈的内存空间是由系统回收的,所有在回收的时候会消耗大量的cpu
char d = 'a';//变量d的数据在栈区中 system("pause");
} //run1是程序代码,所以存储在代码区
void run1(){
while (){
int x = ;//x变量的内存空间在栈区,因为while循环,x每次循环都会初始化,所以系统不断的在栈上创建x的内存空间,回收x的内存空间,会消耗大量的cpu
printf("%d", x);
}
} void run2(){
const cde = ;//变量cde的数据在栈区,与cde是否是常量没关系
printf("%x\n",&cde);//获取cde的地址,检测run2()函数在main()执行完成之后,系统是否会回收cde指向的内存空间
} int add(int a, int b){//形参a,b是临时变量,形参a,b的数据存储在栈区
return a + b;//a+b的操作会在寄存器中执行
}

C语言 内存四大存储区域的更多相关文章

  1. C语言5种存储区域

    C语言5种存储区域 转发至:http://www.mamicode.com/info-detail-927635.html 系统为了管理内存 把内存划分了几个区域 1> 栈区 栈区之中的数据在栈 ...

  2. c语言 变量的存储类别以及对应的内存分配?

    <h4><strong>1.变量的存储类别</strong></h4>从变量值存在的角度来分,可以分为静态存储方式和动态存储方式.所谓静态存储方式指在程 ...

  3. C/C++程序内存的各种变量存储区域和各个区域详解

    转自 https://blog.csdn.net/jirryzhang/article/details/79518408 C语言在内存中一共分为如下几个区域,分别是: 1. 内存栈区: 存放局部变量名 ...

  4. C语言内存管理(转)

    伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程序,往往提心吊胆.如果 ...

  5. iOS学习08之C语言内存管理

    本次主要学习和理解C语言中的内存管理 1.存储区划分 按照地址从高到低的顺序:栈区,堆区,静态区,常量区,代码区 1> 栈区:局部变量的存储区域 局部变量基本都在函数.循环.分支中定义 栈区的内 ...

  6. C语言——内存分配

    1.在C语言的运行过程中,需要内存来存储数据.C语言使用的内存总体可以分为两类:一类是静态区,一类是动态区.2.静态数据存储区包含:只读数据区.已初始化的读写数据区.未初始化的读写数据区     动态 ...

  7. C语言内存地址基础

    来源:http://blog.jobbole.com/44845/ 从计算机内存的角度思考C语言中的一切东东,是挺有帮助的.我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节.比方 ...

  8. 局部变量存储区域静态变量存储区域static变量存储区域

    局部变量存储区域静态变量存储区域static变量存储区域 常见的存储区域可分为: 1.栈 由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变量.函数参数等. 2.堆 ...

  9. 图解Go语言内存分配

    目录 基础概念 内存管理单元 内存管理组件 mcache mcentral mheap 内存分配流程 总结 参考资料 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理. ...

随机推荐

  1. android studio问题rendering problems no render target selected

    activity_main.xml选择Design显示rendering problems no render target selected 在stackOverflow上找到了答案: You ne ...

  2. iOS设计模式之备忘录模式

    备忘录模式 基本理解 这个模式有三个关键角色:原发器(Originator).备忘录(Memento).看管人(caretaker).三者的基本关系是:原发器创建一个包含其状态的备忘录,并传给看管人. ...

  3. Web应用程序系统的多用户权限控制设计及实现-栏目模块【8】

    前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,本章讲述Web权限管理系统的基本模块-栏目模块.栏目模块涉及到的数据表为目录表. 1.1栏目域 为了更规范和方便后期系统的二次开发和维护 ...

  4. iOS开发过程中,触控板的使用技巧

    1.在Storyboard鼠标右键可以直接拖线的,如果你用的是外接的第三方鼠标,没必要按着 control 键再用鼠标左键拖线 如果是触控板的话,双指按下去就可以直接拖线,带3Dtouch功能的触控板 ...

  5. Android直方图递增View

    继上次分析实现Android自定义View之扇形图之后,自己又画了下面的这个递增直方图,本来是想做个静态的直方图就完了,结果想想静态的没啥趣味,于是就加了递增 1 从分析最终效果 界面上要展现的东西有 ...

  6. Grand Central Dispatch (GCD)

    Grand Central Dispatch (GCD) Reference Grand Central Dispatch (GCD) comprises language features, run ...

  7. Ruby安装

    Windows下安装ruby 先安装ruby吧 点击安装,额,咳咳什么情况,好了 人是有国籍的,但知识无国界的 是这个意思吧,选择安装语言   选择安装目录 顺便勾选上添加到环境变量吧   安装完成 ...

  8. 开源项目go2o - golang版的o2o项目

    发一个github上唯一用golang实现的o2o项目 What's Go2o Golang combine simple o2o DDD domain-driven design realizati ...

  9. MongoDb的bin目录下文件mongod,mongo,mongostat命令的说明及使用

    MongoDB的下载地址:http://www.mongodb.org/downloads. 下载好直接解压安装包,即可使用. bin目录下的几个文件说明: mongo 客户端程序,连接MongoDB ...

  10. 《HTML5与CSS3实例教程》

    <HTML5与CSS3实例教程> 基本信息 作者: (美)Brian P. Hogan 译者: 卢俊祥 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:97871153634 ...