第一、C的编译器对内存空间的划分

这里,编译器将内存划分成4个区,分别是栈区、堆区、全局/静态区、常量区。如果要更细地划分,还可以添加一个自由存储区;把全局区看作两部分,为初始化全局区和未初始化全局区。

第二、程序中出现的不同量在内存中的保存

int a = 0; //a:全局初始化区

char *p1; //全局未初始化区

main()

{

int b; //栈

char s[] = "abc"; //栈

char *p2; //栈

char *p3 = "123456"; //"123456"在常量区,p3在栈上。

static int c = 0; //全局(静态)初始化区

p1 = (char *)malloc(10);

p2 = (char *)malloc(20); //分配得来得10和20字节的区域就在堆区。

//123456放在常量区,编译器可能会将它与p3所指向的"123456"优化成一块。

strcpy(p1, "123456");

}

第三、不同内存区中的空间使用有什么特点

上诉程序,已经给出了程序中出现的量,如何划分存储空间。说明如下:

1、栈 - 由编译器自动分配释放,如我们定义了一个变量,由编译器负责为它分配空间和回收。

2、堆 - 一般由程序员通过函数(malloc/free等)分配释放,若程序员不释放,程序结束时可能由OS回收

3、全局区(静态区)- 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。同样由编译器分配释放,不过释放要等到程序结束时

4、常量存储区 - 编译器负责管理,程序结束释放

也就是说,C语言中,我们实际使用到,能对值发生改变的有堆、栈和全局区,而真正能由我们自由分配和释放的操作在堆区完成。

C编译器怎么样对内存划分和使用.doc

下载Word文档到电脑,方便收藏和打印[全文共709字]

编辑推荐:

下载Word文档

c语言编译器储存有什么用,C编译器怎么样对内存划分和使用相关推荐

  1. 【HBuilderX】预编译器错误:代码使用了scss/sass语言,但未安装相应的编译器插件,请前往插件市场安装该插件:

    [HBuilderX]预编译器错误:代码使用了scss/sass语言,但未安装相应的编译器插件,请前往插件市场安装该插件: 一.报错 二.报错原因 三.解决办法 一.报错 预编译器错误:代码使用了sc ...

  2. 预编译器错误:代码使用了less语言,但未安装相应的编译器插件,请前往插件市场安装该插件

    问题002:预编译器错误:代码使用了less语言,但未安装相应的编译器插件,请前往插件市场安装该插件 [编译错误] 使用HBUilderX编译运行时出现 [解决过程] 选择 "工具–插件安装 ...

  3. 嵌入式C语言自我修养:从芯片、编译器到操作系统(附送书籍)

    关注+星标公众号,不错过精彩内容 来源 | 宅学部落 最近,阅读了王工(王利涛)赠送的一本由他编著的书籍<嵌入式C语言自我修养>,感觉写的挺不错.今天分享一下这本书籍<嵌入式C语言自 ...

  4. 每日一书丨嵌入式C语言自我修养:从芯片、编译器到操作系统

    最近,阅读了王工(王利涛)赠送的一本由他编著的书籍<嵌入式C语言自我修养>,感觉写的挺不错.今天分享一下这本书籍<嵌入式C语言自我修养>:从芯片.编译器到操作系统. 从芯片.编 ...

  5. c语言如何用数组存坐标,c语言 数组储存特殊的符号

    c语言: 时空猎人特殊符号的打法,缺失:c语言数组储存的符号3292/9 各位<时空猎人>的玩家朋友们,大家好!欢迎大家访问新浪时空猎人专区,哪里都可以聊天,游戏中也有聊天系统,分为团队聊 ...

  6. c语言编译器 代码优化,c编译器高级篇!!搞定c编译器优化

    对于c编译器,想必大家也有所了解,3款主流c编译器也是活跃在不同人群的PC上.网络上很多文章都止步于对c编译器的介绍,并未探索c编译器更加深层次的内容.而在本文中,将涉及c编译器的高级部分--c编译器 ...

  7. Go语言汇编优化-蒙卓:汇编直接操作内存-减少读写,并行操作,硬件加速

    讲汇编优化,不得不说一句高德纳的名言--过早的优化就是万恶之源.如果你们没有被逼到绝路,或者要榨干CPU的性能,千万不要尝试以下演讲的内容.  我给 Go 的 1.11 提交了这几个项目,第一个是 ...

  8. 编译器不识别stm指令_编译器简介

    编译器是将"一种语言(高级语言)"翻译为"另一种语言(低级语言)"的程序. 编译器能够识别代码中的词汇.句子以及各种特定的格式,并将他们转换成计算机能够识别的二 ...

  9. 编译器:GNU工具链GCC编译器的编译方法和编译步骤

    https://www.runoob.com/w3cnote/working-process-of-the-compiler.html https://www.runoob.com/w3cnote/g ...

最新文章

  1. 图像处理之基础---周末戏说卷积
  2. 两段用来启动/重启Linux下Tomcat的Perl脚本
  3. 如何通过VC的 CHttpFile 抓取网页内容
  4. C#实现DataTable按天分组并计数
  5. MATLAB信号处理之连续时间系统的时域分析
  6. ssis 派生列_具有多个表达式与多个转换的SSIS派生列
  7. mysql on 子句_ON子句中的MySQL未知列
  8. 十大免费网络工具 瞬间提升业务效率
  9. 惊呆了,我们的加密视频教学竟然可以轻易翻录和破解!!!
  10. 计算机总是莫名其妙重启,电脑老是自动重启怎么办,电脑为什么经常自动重启_系统圣地...
  11. [C#]Windows服务程序[转载西门吹雪的好文章]
  12. 获取官方win10系统镜像方法
  13. 南华大学计算机考研真题,2021南华大学考研历年真题复习资料
  14. 天耀18期 -08.面向对象-上转型【作业】
  15. 手写Android热修复
  16. anaconda企业版下载_Anaconda免费版下载-多功能Python集成开发环境 v2020.02 免费版 - 安下载...
  17. ARM与NEON加速指令
  18. 再先进的在线教学,也要回归这个本质
  19. 免费网络测试仪 MiniSMB Hurricane II — 如何测试通过虚拟机发包
  20. Mapgis to shp数据转换

热门文章

  1. Eclipse如何添加Maven的scala支持
  2. java中swing循环_在Java游戏循环中使用“ SwingUtilities.invokeLa...
  3. IntelliJ IDEA 内存优化最佳实践
  4. Springboot整合log4j2日志全解
  5. 23种设计模式(5)-适配器模式
  6. 2019.08.26关于分页
  7. appium启动APP配置参数:
  8. echarts 水桶注水式柱状图
  9. poj 2240 Bellman-Flod 求环
  10. (转)十分钟入门pandas