C语言学习日记8
Posted 我光吃饭不洗碗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言学习日记8相关的知识,希望对你有一定的参考价值。
4.1.1 程序运行为什么需要内存?
4.1.1.1 计算机程序运行的目的。
4.1.1.2 计算机程序运行过程
4.1.1.3 冯诺依曼结构和哈佛结构
冯诺依曼结构是:数据和代码放在一起。
哈佛结构是:数据和代码分开存在。
什么是代码:函数
什么是数据:全局变量、局部变量。
4.1.1.4 动态内存DRAM和静态内存SRAM。
4.1.1.5 总结:为什么需要内存?
4.1.1.6 如何管理内存
从操作系统角度讲:操作系统掌握所有的内存,因为内存很大,所以操作系统把内存分为1个个的页面(一般是4KB),然后以页面为单位来管理。页面内用更细小的方式来以字节为单位管理。操作系统给我们提供里内存管理的一些接口,我们只需要用API即可管理内存。譬如在C语言中使用malloc申请 free释放。
没有操作系统时:在没有操作系统时(裸机程序),程序需要直接操作内存。
再从语言角度来讲:不同的语言提供了不同的操作内存的接口。例如汇编:完全没有内存管理,直接使用内存地址;C语言中编译器帮我们管理直接内存地址,我们都是通过编译器提供的变量名等来访问内存;C++语言对内存的使用进一步封装,我们可以用new来创建对象(其实就是为对象分配内存),然后使用完了用delete来删除对象(其实就是释放内存)。如果程序员new了一个对象,但是用完忘记delete就会造成这个对象占用的内存不能释放,这就是内存泄漏。JAVA/C#:这些语言不直接操作内存,而是通过虚拟机来操作内存。这样虚拟机作为我们程序员的代理,来帮我们处理内存的释放工作。虚拟机会帮我们管理。但是其实他这个虚拟机回收内存是需要付出一定代价的。当我们程序对性能非常在乎的时候(比如操作系统内核)就会用C/C++;当我们对开发程序的速度非常在乎的时候,就会用JAVA/C#等语言。
4.1.2.1 什么是内存(硬件和逻辑角度)
硬件上:是一个配件。
从逻辑角度:它可以随机访问,(意思是只要给一个地址,就可以访问这个内存地址)、并且可以读写。内存在编程中天然是用来存放变量的(就是因为有了内存,所以C语言才能定义变量,C语言中的一个变量实际就对应内存中的一个单元)。
4.1.2.2 内存的逻辑抽象图
4.1.3 位和字节
4.1.3.4 字和半字
4.1.3.4 内存位宽
硬件上讲:硬件内存的实现本身是有宽度的。
逻辑上讲:内存位宽在逻辑上是任意的,从逻辑上说不管内存位宽是多少,对我的操作不构成影响。但我们的操作不是纯逻辑而是需要硬件去执行的,所以不能为所欲为,所以我们实际的很多的操作都是受限于硬件的特性的。
以上是关于C语言学习日记8的主要内容,如果未能解决你的问题,请参考以下文章