内存这个大话题
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,散列表),
学习地址: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 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置