摘要: 一、C++对象模型中nostatic data member被置于每一个class object中,static data member、static function member和nostatic function member都被存放在所有的class object之外。virtual f... 阅读全文
posted @ 2016-11-27 15:31 luizp 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 一、静态链接缺陷 静态链接需要把数据和代码都连接到自己的可执行文件中,运行时系统中有时会存在多个库文件副本从而容易造成内存和磁盘的空间浪费、其次静态链接模块更新困难。为了解决这两个问题需要把程序的模块分隔开,生成相互独立的文件从而不在将他们链接在一起。对目标文件的链接等到运行时在进行,这就是... 阅读全文
posted @ 2016-11-27 14:29 luizp 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 一、进程虚拟地址空间 1、程序是一个静态的概念,他是一些预编译好的指令数据集合的一个文件。进程是一个动态的概念是一个程序运行时的过程。​ 每个进程都有自己独立的虚拟地址空间,虚拟地址空间的大小有硬件平台决定,具体说是CPU位数决定的,32位的平台具体大小是0-4G。从程序员的角度来讲可以通... 阅读全文
posted @ 2016-11-27 14:28 luizp 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 一、在Linux下一个程序的编译过程可分为:预编译、编译、汇编、链接。 1、预编译 gcc -E hello.c -o hello.i 预编译过程注意处理那些源代码文件中的以#开始的预编译指令。比如“#include”“#define”“#ifdef”等。删除注释,​添加行号。 2、编... 阅读全文
posted @ 2016-11-27 14:27 luizp 阅读(219) 评论(0) 推荐(0) 编辑
摘要: System V 与Posix 共享内存区 二者的差别是: (1)Posix共享内存区是先调用shm_open然后再调用mmap,System V 共享内存区是先调用shmget再调用shmat。 (2)Posix共享内存区对象的大小可在任何时刻通过ftruncate修改,而System... 阅读全文
posted @ 2016-11-27 14:26 luizp 阅读(201) 评论(0) 推荐(0) 编辑
摘要: Posix提供了两种在无亲缘关系进程间共享内存区的方法: (1)内存映射文件:先有open函数打开,然后调用mmap函数把得到的描述符映射到当前进程地址空间中的一个文件(上一篇笔记所用到的就是)。 (2)共享内存区对象:先有shm_open打开一个Posix IPC名字(也可以是文件系统中... 阅读全文
posted @ 2016-11-27 14:25 luizp 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 一、信号量分类 (1)Posix有名信号量,可用于进程和同一进程不同线程间同步 (2)​Posix基于内存的信号量,存放在共享内存区中,可用于进程和同一进程不同线程间同步 (3)System V信号量​,在内核中维护,可用于进程和同一进程不同线程间同步。 二、信号量、互斥锁、条件变量的... 阅读全文
posted @ 2016-11-27 14:24 luizp 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 1、互斥锁 互斥锁API pthread_mutex_lock(pthread_mutex_t *mutex); 用此函数加锁时,如果mutex已经被锁住,当前尝试加锁的线程就会阻塞,直到互斥锁被其他线程释放。当此函数返回时,说明互斥锁已经被当前线程成功加锁. pthread_mu... 阅读全文
posted @ 2016-11-27 14:23 luizp 阅读(1111) 评论(0) 推荐(0) 编辑
摘要: 共享内存是IPC最快的方式。一旦这种方式映射到共享它的进程地址空间,这些进程间的数据传递就不在涉及内核。管道、FIFO、System V消息队列的read、msgrcv、write和msgsnd都涉及从进程与内核的数据复制。 ​共享内存操作函数: 1、系统调用mmap() void... 阅读全文
posted @ 2016-11-27 14:22 luizp 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 一、Posix消息队列 ​1、mq_open,mq_close,mq_unlink #include mqueue.h> mqd_t mq_open(const char *name, int oflag, ...); oflag:O_RDONLY​,O_WRONLY,O_RDWR,... 阅读全文
posted @ 2016-11-27 14:20 luizp 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 1、概述 管道:是最初的Unix IPC形式,但是没有名字只能有亲缘关系的进程使用。FIFO有时称为有名管道,可以在任意进程间使用。 2、管道​ #include int pipe(int fd[2]); ​返回值:成功,返回0,否则返回-1。参数数组包含pipe使用的两个文件的描述... 阅读全文
posted @ 2016-11-27 14:18 luizp 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 一、接口不变就可以不需要重新编译? 对于很多库的实现者可能会有这样的认识“接口不变就可以不需要重新编译”,其实这句话是有前提的,前提是实现的动态库有足够的兼容性和鲁棒性。尤其是C++实现的动态库,C++只对语言层规则做了规定,没有二进制级别的任何规定。 COM本质论里面的例子很好的阐述了这点,简... 阅读全文
posted @ 2016-11-27 12:02 luizp 阅读(1248) 评论(0) 推荐(0) 编辑
摘要: 1、泛型算法定义 泛型算法:因为它们实现共同的操作,所以称之为“算法”;而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型、甚至其他类型的序列上,这些我们将在本章的后续内容中了解。自定义的容器类型只要与标准库兼容,同... 阅读全文
posted @ 2016-11-27 11:37 luizp 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 1、关联容器定义 关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。 关联容器(Associative containers)支持通过键来高效地查找和读取元素。两个基本的关联容器类型是 map set。map 的... 阅读全文
posted @ 2016-11-27 11:34 luizp 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 标准库定义了三种顺序容器类型:verctor、list、deque(双端队列) verctor:支持快速随机访问。 list:支持快速插入​删除。 deque:双端队列 1、容器构造函数 容器构造函数 将一个容器复制给另一个容器时类型必须匹配,容器类型和元素类型都必须相同。​... 阅读全文
posted @ 2016-11-27 10:56 luizp 阅读(143) 评论(0) 推荐(0) 编辑