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的主要内容,如果未能解决你的问题,请参考以下文章

C语言学习日记4

C语言学习日记5

C语言学习日记8

C语言学习日记2

python学习日记——安装及初识

C语言日记② 初识 C的内存