int main()
{
int *p1 = new int;
int *p2 = new int;
int *p3 = new int;
int *p4 = new int;
int *p5 = new int;
cout << p1 << p2 << p3 << p4 <<p5 << endl;
return 0;
}
约定
1、作业及时完成。2、50-200 lines codes.
学习方法:
不懂先用,以后再领会,要会用,理解力达到80%。
课程体系:
语言
C
C++
算法
算法、数据结构
基础(系统核心(Kernel)编程)
Linux/Unix Windows MacOSX
PC机 服务器 ARM
设备驱动/进程管理/内存管理/文件目录系统管理/IO
内存管理
文件目录
IO
进程管理
进程创建
进程通信
进程同步
线程管理
线程同步
线程通信
应用
网路
数据库(pro*c/c++)
UI
shell
XML处理
分布式与中间件(Tuxedo/Corba/MQ)
web service
OpenGL
课程定位:提供编程的能力,为设备驱动与Windows应用奠定基础
内存管理
硬件层次
内存结构管理
内核层次
内存映射
堆扩展
语言层次
C:malloc free
C++:new delete
数据结构
STL(SGI)
智能指针
1、问题:
malloc怎么分配空间?
malloc与new的关系?
2、Linux对内存的结构描述
main()
{
while(1); /proc/${pid}/ 存放进程运行时候所有的信息
}
结论:任何程序的内存空间分成4个基本部分:
1、代码区 自加载器 /lib/ld-linux.so.2 ./main()
2、全局栈区
3、堆
4、局部栈
ps aue
理解程序的变量与内存空间的关系
结论:
1、内存分四个区;
2、各种变量对应存放区;
3、堆栈是一种管理内存的数据结构;
4、查看程序的内存地址。
理解malloc的工作的原理
malloc使用一个数据结构(链表)维护分配空间,链表的构成:分配的空间+上一个空间+下一个空间数据+ 本空间的数据等信息,分配的空间不要越界访问,因为容易破坏后台的维护结构。导致malloc/free/calloc/realloc不正常工作
C++的new与malloc的关系
malloc new new[ ]
realloc
calloc new[ ]
free delete delete[]
结论:new的实现使用的是malloc来实现的
区别:new使用malloc后,还要初始化空间。基本类型,直接初始化成默认值。UDT类型调用指定的构造器 new 类型();
delete调用free实现。
区别:delete负责调用析构器,然后再调用free。
new与new[ ]
new只调用一个构造器初始化。new[ ]循环对每个区域调用析构器
delete与delete[] char a[20 ] ; int *p = new(a) int; new(void *)定位分配