c语言高级----内存1

1 程序运行的目的无外乎两个==得到结果或得到过程。

计算机程序运行过程,其实就是程序中很多个函数相继运行的过程。
程序是由很多个函数组成,程序的本质就是函数,函数的本质就是加工数据的动作


冯诺依曼结构:数据和代码放一起。
哈佛结构:数据和代码分开存在。
什么是代码:函数
什么事数据:全局变量,局部变量。


动态内存DRAM:
静态内存SRAM:


为什么需要内存:内存是用来存储可变数据的,数据在程序中表现为全局变量,局部变量。
(在gcc中,其实常量也是存储在内存中的)
(大部分单片机中,常量是存储在flash中的,也就是代码段)
         内存对写程序至关重要。越简单的程序需要越少内存。
数据结构:研究如何组织数据
算法:研究更有效的方法来加工数据。


如何管理内存:操作系统角度来讲 :以页面为单位(4kB)来进行管理,页面内以更细小的方式(字节)来进行管理
     从语言角度来讲:不同语言,不同内存管理接口(c/c++:malloc,free/new,delete c#/java 虚拟机)。


2 什么是内存:从逻辑上来说:内存实际上是由无限多个内存单元格组成,每个单元格有一个固定的内存地址,这个地址和这个内存单元唯一对应且永久绑定。

内存位宽:现实硬件上有:8位 16位 32位 64位(逻辑上的其他位宽,市面上买不到)。


位和字节:位(1bit) 字节(8bit) 半字(一般是16bit) 字(一般是32bit)。


半字=1/2*字      双字=2*字。


linux+ARM平台上,字是32位的。


3 内存编址方法:内存在逻辑上就是一个一个的可以装东西(数据)的格子,有编号即内存地址(数字)和这个格子空间一一对应,永久绑定,这就是内存的编址方法。
        程序运行时,cpu只认识内存地址,而不关心地址所代表的空间在哪里,硬件设计保证了按照这个地址就能找到这个空间


关键:内存编址是以字节为单位的,即一个内存地址对应的空间大小是固定的,就是一个字节(8bit).


数据类型和内存:int(整型)--整型数据,这个整就体现在它和cpu本身的数据位宽是一样的,譬如32位cpu,整型就是32位=int就是32位。
数据类型和内存的关系在于:数据类型定义变量,变量在内存储存,数据类型和内存相匹配才能获得最好的性能

内存对齐:硬件实现,非对齐访问也可以但是效率低。


内存编址看数组意义:一个int a[]数组中首元素为a[0]有32位4个字节,首地址为a[0]的第一个字节的地址。


4 c语言如何操作内存
int a:编译器帮我们申请了1个int类型的内存格子(长度是4字节,地址是确定的,但是只有编译器知道,我们不需要知道)并且将a和这个格子绑定。

c语言中数据类型的本质含义:表示一个内存格子的长度和解析方法。
解析方法:int float都是4个字节,但是存储形式不一样,解析方法不一样。
类型强制转化:改变长度或解析方法


c语言中:函数就是一段代码的封装,函数名就是这段代码的首地址



猜你喜欢

转载自blog.csdn.net/qq_32809273/article/details/53054804
今日推荐