博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言 内存四大存储区域
阅读量:4922 次
发布时间:2019-06-11

本文共 1762 字,大约阅读时间需要 5 分钟。

#include
#include
//程序代码指令,define定义的常量---代码区(只读)//全局(关键)变量/常量,静态(关键)变量/常量,常量字符串---静态区//静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。//局部变量---栈区//栈区上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。//由malloc或者realoc,calloc分配的内存区域---堆区//堆区其生命周期由free决定。#define PI 3.14 ////全局变量int a = 10;int b[5] = { 1, 2, 3, 4, 5 };int const c = 2;void run2();void main(){ int num = 10; //对于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)* 1024);//malloc(sizeof(int)* 1024);分配的内存就是堆区,但是指针p1是在栈区 //堆的使用情况:①无法确定需要内存的大小;②需要的内存很大 //堆的注意点:堆和栈不同,堆的内存大小是由程序员分配的,必须由程序员手动释放(free(p1);); //对于栈来说,栈的内存大小由系统分配(栈的极限大约是1M,非常小),所以栈的内存空间是由系统回收的 //堆的内存大小是由程序员分配的,理论上可以占据系统中所有的内存(甚至能抢占栈的内存空间) //因为栈的内存空间是由系统回收的,所有在回收的时候会消耗大量的cpu char d = 'a';//变量d的数据在栈区中 system("pause");}//run1是程序代码,所以存储在代码区void run1(){ while (1){ int x = 0;//x变量的内存空间在栈区,因为while循环,x每次循环都会初始化,所以系统不断的在栈上创建x的内存空间,回收x的内存空间,会消耗大量的cpu printf("%d", x); }}void run2(){ const cde = 2;//变量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的操作会在寄存器中执行}

 

转载于:https://www.cnblogs.com/zhanggaofeng/p/5140178.html

你可能感兴趣的文章
javascript挑战编程技能-第二题:计算字符数
查看>>
osgEarth编译
查看>>
win10与linux双系统切换时间不一致的调整
查看>>
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)...
查看>>
Enum Binding ItemsSource In WPF
查看>>
Javaweb 实现一个简单留言板
查看>>
UIP协议栈
查看>>
ubuntu设置默认终端
查看>>
洛谷P2731 骑马修栅栏 Riding the Fences
查看>>
python request 留位置0
查看>>
linux内核分析程序破解实践报告
查看>>
python datetime 操作相关
查看>>
2019-06-18 今日头条面试题。 合理设计这两个类。 2。 student 继承person 3 不能使用class...
查看>>
网络构建入门技术(5)——子网划分应用
查看>>
OpenCV学习笔记——滑动条开关
查看>>
memcpy函数、memset()函数、strcpy函数、strncpy函数、strcmp函数
查看>>
完成个人中心—导航标签
查看>>
理解OAuth 2.0
查看>>
XML学习笔记1——概述
查看>>
unity3d游戏开发——新手引导
查看>>