内存这个大话题

《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org


(1).
程序 = 代码 + 数据,
为了得到结果,为了得到过程,
结果是一种过程,过程也是一种结果,




(2).
冯诺伊曼;数据和代码放在一起,
哈佛结构:数据和代码分开存放,
代码;就是函数,
数据;全局变量,局部变量等,


内存,存储可变数据,
越庞大的程序需要更多的内存,
数据结构:研究数据如何在内存中组织,
算法;研究更好的算法加工数据,
而数据是离不开内存的,


有无OS,管理内存不同,
有OS:各种内存管理机制,比如页式,OS来负责,我们调用接口比如malloc来使用即可,
无OS:程序员自己负责管理,


从不同语言角度来看:不同语言提供不同内存操作的接口,
1.汇编直接通过内存地址来访问,且没有管理机制,
2.C语言中,编译器通过变量名的方式来访问,有内存管理机制,比如malloc体现,
3.C++,new对象的同时,已经分配了内存,不过内存管理还是靠程序员自己,
4.JAVA,C#,虚拟机为我们提供了更多的服务,
总结:越高级的语言,开发效率越高,程序运行性能越差,


(3).
内存;随机访问,存放变量,变量和内存单元的关系,
同样一些设计,要结合硬件的特性,如下图,

在32位机器中,几乎都是这种情况,这个无尽头,指的是逻辑上的,

内存这个大话题_第1张图片
位和字节;所有机器,8位(bit)1字节(Byte),
半字;一般16bit,字:一般32bit,和软硬件平台有关系,


我们课程linux+ARM中,字是32bit,


(4)
内存的编址是以字节为单位的,
内存和数据类型的关系;int 整形(和CPU位宽一样),
32位系统,定义变量最好是int,效率最高!
32位系统定义只需要1bit的bool类型,都是用int来实现的,
内存对齐;因为硬件,


(5).
数据类型:内存格子长度和解析方法,
(char)0;
(char *)0;
由此可见,0代表的是内存地址,
C语言中,函数名的实质就是一段代码的首地址,即内存地址,
指针;指针变量,


等会再看看笔记!


(6).
C实现面向对象,
struct s
{
int age;
void (*pFunc)(void);//函数指针
}


(7).
栈,数据结构,管理内存,
小内存,自动化,C语言中局部变量,


栈内存是脏的,
int a = 15;
实际如下,
int a;//此时a的值是脏的,随机的,
a = 15;


(8).
内存需求在时间和大小上非常随机,于是出现堆,
堆有操作系统中的堆管理器来管理,


(9).
嵌入式主要是链表,偶尔哈希表,其它你看吧~
问题不同:适合的数据结构和算法会有所不同,
linux内核在字符设备驱动管理时,使用的是哈希表(hash table,散列表),

你可能感兴趣的:(C语言)