第一周总结

来源:互联网 发布:学c语言用什么软件好 编辑:程序博客网 时间:2024/04/27 17:54

精通windows api:

1.文件系统:

卷(volumes)

磁盘和驱动器管理:  操作驱动器挂载点

文件和目录管理:  获取程序所在的目录,程序模块路径,获取和设置当前目录

                        查找文件,遍历指定目录下的文件和子目录

                        递归遍历目录树

                        获取,设置文件属性和时间

内存映射文件:   使用Mapping File提高文件读写的效率

                      通过Mapping File在进程间传递和共享数据

2.内存管理:

虚拟地址空间:  为了访问内存的统一和方便,操作系统允许其上运行的程序访问所有的4GB内存空间中的地址;

 

进程的内存空间:  32位的window操作系统将4GB的虚拟内存划分为两个部分,进程使用2GB,称为用户进程空间;内核使用2GB,称为系统地址空间或内核地址空间(也可设置为用户进程空间使用3GB,内核使用1GB),用户空间的地址范围为0x00000000~0x7FFFFFFF,内核空间的地址范围为0x80000000~0xFFFFFFFF

 

分页与分段内存管理,内存映射与地址转换:  32位地址的高10位称为页目录索引(Directory),次10位称为页表索引(Table),余下的12位为偏移(Offset)

 

进程的内存空间:  虚拟内存与物理内存的对应关系window系统中每个进程都有一个私有的虚拟地址空间,系统需要将每个进程的虚拟地址都映射到物理内存地址上;系统为每一个进程都创建一个页目录(Directory)和一组页表;每个进程的页表是独立的,而内核空间的页表是所有进程共享的

 

虚拟内存布局,内存的分工,堆与栈:  进程的虚拟内存空间分为两个部分,低2GB(或3GB)由应用程序使用,高2GB(或1GB)由系统内核程序使用;系统内核的内存空间中包括驱动程序,系统内核可执行程序,用于内存管理的数据结构(页目录,页表等),用于进程管理,线程调度的数据结构,各种中断处理程序,系统缓存等; 应用程序可使用的低地址空间中包括了应用程序的代码,数据(全局变量等),系统和用户DLL的代码,各线程的栈,堆等; 进程的每个线程都有自己的栈,栈与函数的调用,执行和返回及局部变量的保存有关,一般情况下,栈中保存着函数的参数,返回地址和局部变量,调用函数将参数入栈,调用指令将函数返回地址入栈,被调用函数负责保存调用函数的相关栈指针,为局部变量分配空间等; 堆是一种可以动态分配和释放的内存,由堆管理器进行管理,用户在程序中使用的内存分配函数都是通过堆进行分配的

 

堆管理:  用户使用内存分配函数分配的内存都位用堆中,所以使用堆管理函数对内存进行分配,释放等是最为直接的方式;Window系统中,每个进程都有自己的堆,每个进程的堆的数量也有所不同;堆(Heap)并不是内存块,而是一种用于内存管理的对象,也是一种内存组织的形式;

 

虚拟内存管理:进程的虚拟地址空间内存页面分为3种状态:空闲的(free),保留的(reserved)和提交的(committed);  如果直接分配内存为"提交的",那么在分配完成后就可以对内存进行访问

 

内存操作与内存信息管理:CopyMemory, FillMemory, MoveMemory, ZeroMemory

 

C++ primer plus:

类内存分配(C,C++技术交流群):

class A

{}

类大小为1,编译器为空类加入一个char,使类在内存中有个唯一的地址,不是空类时,就不会加

class A

{

     char a;

     int b;

     char c;

}

大小为12

class A

{

    char a;

    char b;

    int c;

}

类大小为:8

class A

{

    char a;

    int b;

    double c;

}

类大小为16

class A

{

    char a;

    double b;

    int c;

}

类大小为24

以上为类的内存地址对齐方式;

 

const Stock& topval ( const Stock& s)const

括号中的const表明,该函数不会修改被显式地访问的对象;

括号后的const表明,该函数不会修改被隐式地访问的对象;

由于该函数返回了两个const对象之一的引用,因此返回类型也应为const引用;

 

数据结构:

串:

KMP算法:晕了几天,还是没搞懂;最后,大概弄懂了意思,只是没从代码角度去理解;

中缀表达式,后缀表达式

递归两个条件:一是规模较大的问题能分解成为一个或多个规模较小,但具有类似于原问题特性的子问题,即较大的问题可用较小的子问题来描述,解原问题的方法同样可用来解这些子问题,如有必要,这种分解可以继续下去;二是存在一个或多个无须分解,可直接求解的最小子问题;前者称为递归步骤,后者称为终止条件;(典型:汉诺塔)

原创粉丝点击