• 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 内存位宽

        硬件上讲:硬件内存的实现本身是有宽度的。

        逻辑上讲:内存位宽在逻辑上是任意的,从逻辑上说不管内存位宽是多少,对我的操作不构成影响。但我们的操作不是纯逻辑而是需要硬件去执行的,所以不能为所欲为,所以我们实际的很多的操作都是受限于硬件的特性的。

  • 相关阅读:
    JS高级——eval
    JS高级——Object.prototype成员
    JS高级——原型链
    JS高级——逻辑中断
    移动web——bootstrap媒体对象
    移动web——bootstrap如何修改原组件
    移动web——bootstrap响应式轮播图
    Leetcode题解
    位运算实现四则运算(C++实现)
    扫码登陆原理
  • 原文地址:https://www.cnblogs.com/thorzhou/p/5589565.html
Copyright © 2020-2023  润新知