博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C语言中内存的3个问题
阅读量:6209 次
发布时间:2019-06-21

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

1.程序为什么需要内存?

计算机程序 = 代码 + 结果,从宏观上理解,代码就是动作,而数据被动作加工,最终返回结果。程序是被放在内存中运行的,并且需要内存来存储一些临时变量,因此,对于程序来说,内存是程序的立足、生命之地。

2.从硬件、逻辑角度看内存?

从硬件角度上,内存是一个硬件器件,由硬件系统提供,根据不同的硬件实现原理,可以把内存分为SRAM,DRAM(DRAM有好多代,譬如最早的SDRAM,到后来的DDR2,DDR2...);从逻辑的角度上,内存是一种可以随机访问并且读写的东西,该东西实际上是由无限多个内存单元组成,每个单元有一个固定的地址叫做内存地址。

3.内存从哪获取而来?

程序通过3中方式获取内存:栈(stack)、堆(heap)、数据区(.data)。

C语言中使用栈来保存局部变量,栈的入口即出口,按照先进后出FILO(first in last out)的规律管理内存。当我们在C中定义一个局部变量时,譬如int a,编译器会在栈中分配一段4字节空间给该变量使用,其背后的实质是:将这4字节的栈内存的内存地址和我们定义的局部变量名a给关联起来。

堆是获取内存的另一种方式,当需要内存容量比较大时,可以使用malloc和free反复申请使用、释放;

C语言中初始化为非零的全局变量和静态局部变量(即使用static修饰的局部变量)获取内存则是通过数据区(.data)。对于未初始化或显式初始化为0的全局变量则放在bss段。bss段和.data段没有本质区别,几乎可以不用明确去区分这两种。

转载于:https://www.cnblogs.com/CYP01/p/6372094.html

你可能感兴趣的文章
MyISAM InnoDB 区别
查看>>
NFC标签的一些事
查看>>
java虚拟机学习(二)java对象的创建及访问定位
查看>>
字符串的排列组合问题--
查看>>
关于Java ThreadLocal
查看>>
使用iscroll
查看>>
MY域名,什么是MY域名?
查看>>
第二十天:expand
查看>>
coreData
查看>>
使用Matrix对象旋转和缩放图像
查看>>
JS 固定图片背景
查看>>
PreparedStatement
查看>>
错误: ‘EOF’在此作用域中尚未声明
查看>>
ajax跨域提交
查看>>
try_catch_finally的注意事项
查看>>
黄健:开放沟通,一”触“即发
查看>>
陆怡-互联网金融系统中的资金正确性保障
查看>>
Android Studio Gradle编译项目报错弹出一个提示框没有具体的错误信息
查看>>
数独游戏
查看>>
vImageCategory
查看>>