zoukankan      html  css  js  c++  java
  • 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 内存位宽

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

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

  • 相关阅读:
    做事的底线和逻辑
    我在华为的十年----徐家俊
    华为的冬天
    如何当好一个师长--林彪
    Base64 的那些事儿
    流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
    软件目的需求开发与管理
    车载行业认证资质
    tcpdump抓包分析 https://www.01hai.com/note/av263669
    packages.conifg
  • 原文地址:https://www.cnblogs.com/thorzhou/p/5589565.html
Copyright © 2011-2022 走看看