您的位置:首页 > 编程语言 > C语言/C++

内存这个大话题

2016-04-23 23:29 253 查看
《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org

(1).

程序 = 代码 + 数据,

为了得到结果,为了得到过程,

结果是一种过程,过程也是一种结果,

(2).

冯诺伊曼;数据和代码放在一起,

哈佛结构:数据和代码分开存放,

代码;就是函数,

数据;全局变量,局部变量等,

内存,存储可变数据,

越庞大的程序需要更多的内存,

数据结构:研究数据如何在内存中组织,

算法;研究更好的算法加工数据,

而数据是离不开内存的,

有无OS,管理内存不同,

有OS:各种内存管理机制,比如页式,OS来负责,我们调用接口比如malloc来使用即可,

无OS:程序员自己负责管理,

从不同语言角度来看:不同语言提供不同内存操作的接口,

1.汇编直接通过内存地址来访问,且没有管理机制,

2.C语言中,编译器通过变量名的方式来访问,有内存管理机制,比如malloc体现,

3.C++,new对象的同时,已经分配了内存,不过内存管理还是靠程序员自己,

4.JAVA,C#,虚拟机为我们提供了更多的服务,

总结:越高级的语言,开发效率越高,程序运行性能越差,

(3).

内存;随机访问,存放变量,变量和内存单元的关系,

同样一些设计,要结合硬件的特性,如下图,

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



位和字节;所有机器,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语言