进程间通讯 --- 消息队列、信号量、共享内存(XSI IPC结构)

XSI IPC结构:源自System V UNIX(1983)的IPC功能(为了满足进程间通信,首次引入三中进程间通信机制(IPC):消息队列、信号量、共享内存)。 IPC结构(消息队列、信号量、共享内存)通过共同的IPC资源通信,而IPC资源是通过内核中IPC结构的一个非整数的标识符来区分的,...

2019-03-13 12:10:13

阅读数 9

评论数 0

进程间通讯 --- 管道(半双工通信)

管道: 一个进程输出数据到另一个进程数据输入的通道。(半双工通信:同一时间,只能一端读另一端写,因为只有一条信道) 有名管道(命令管道): 在磁盘上会存在一个管道文件标识,但管道文件不占用磁盘block空间,数据会缓存在内存上。 可应用于同一台主机上的有权限访问的任意n个进程间通讯。(必须...

2019-03-05 13:53:02

阅读数 24

评论数 0

排序 - - -归并排序

二路归并排序: 基本思想:将两个有序表合并成一个有序表。(将下列两个已排序的顺序表合并成一个已排序表。顺序比较两 者的相应元素,小者移入另一表中,反复如此,直至其中任一表都移入另 一表为止。)   二路归并排序的基本思想是将两个有序表合并成一个有序表。 给定排序码46,55...

2019-01-30 19:15:53

阅读数 19

评论数 0

排序 - - - 选择排序

选择排序: 基本原理:  将待排序的元素分为已排序(初始为空)和未排序两组,依次将未排序的元素中值最小的元素放入已排序的组中。      简单选择排序: 简单选择排序的基本过程为: (1)在一组元素R[i]到R[n]中选择具有最小关键码的元素 (2)若它不是这组元素中的第一个元素,则...

2019-01-28 13:53:40

阅读数 50

评论数 0

排序 - - - 交换排序

  交换排序: 通过排序表中两个元素的比较,若与排序要求相逆(不符合升序或降序),则将两者交换。 快速排序: 基本思想:任取待排序序列中的某个元素作为标准(也称为支点、界点,一般取第一个元素),通过一次划分,将待排元素分为左右两个子序列,左子序列元素的排序码均小于基准元素的排序码,右子序列...

2019-01-21 17:22:37

阅读数 57

评论数 0

排序 - - - 插入排序

插入排序: 基本思想:每次将一个待排序的元素,按其元素的大小插入到前面已经排好序的序列的适当位置,直到全部元素插完成为止。 直接插入排序: 基本思想:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元...

2019-01-20 11:37:55

阅读数 33

评论数 0

内存池

内存池:为了解决new、malloc申请内存块的大小不定,频繁使用会产生大量的内存碎片问题。 基本思想:在真正使用内存前,先申请分配一定数量的、大小相等的内存块备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。 内存分配alloc():申请一定数量的、大小...

2019-01-12 14:06:40

阅读数 34

评论数 0

C++单例模式

单例模式:该类只生成一个对象,该类返回一个引用或指针(永远是指向唯一的对象),定义一个静态的方法来得到该类的唯一对象。 第一种,对象存放在堆区,运行时生成对象(注意线程安全问题) class SingleTon { public: static SingleTon* getInstance...

2019-01-12 11:35:09

阅读数 64

评论数 0

初始换列表;常对象、静态对象的使用方法

初始换列表:  class Test1 { public: Test1(int a, int b) :ma(b), mb(a) { //等价 ma = b; mb = a; } void Show() { std::cout <&lt...

2018-11-30 18:19:56

阅读数 17

评论数 0

C++特性之封装:类与对象

封装: 将东西包裹起来,使外界无法知道,只能通过某些特定的方式才能访问。其目的是增强安全性和简化编程,使用方无需知道其具体实现,只能通过外部接口以及特定的权限来使用其成员。 C++中的类就是把属性和方法进行封装,同时对外部的访问通过访问限定符进行限制。而类是一种抽象的概念的数据类型,就像设计图...

2018-11-27 12:02:23

阅读数 30

评论数 0

引用 '&' 与const

引用: 由于按值传递参数时会为实参生成一个副本,需要花费大量时间和空间,并且无法修改实参。然而引用传递实参时,可以直接使用实参,并且可以修改实参。 实例: int a = 10; int& b = a; //b为a的别名 void Swap(int&am...

2018-11-23 00:02:39

阅读数 24

评论数 0

虚拟地址空间

在进程创建的时候,操作系统会为之分配4G大小的地址空间(32位的CPU的寻址空间是4G)。4G虚拟地址空间,分为两部分:用户空间和内核空间(Linux:3/1; windows:2/2)。以Linux为例,如图,3G的用户空间(User Space)、1G的内核空间。 保留区(128m)的空...

2018-11-19 18:32:23

阅读数 40

评论数 0

.c/.cpp程序生成可执行文件的过程

 .c/.cpp文件生成到执行过程    预编译: gcc -E main.c -o main.i   main.i 处理源代码文件中的“#”开始的预编译指令。如“#include”、“#define”等。具体如下:  宏替换:将所有的“#define”删除,并展开所有的宏定义。 ...

2018-11-19 18:05:10

阅读数 63

评论数 0

malloc()、free()与new、delete的区别

定义与使用: malloc()和free()函数: 动态内存分配(申请一块连续的指定大小的内存区域,以void *类型返回分配的内存区域地址)与释放函数(释放malloc函数给变量分配的内存空间)。C++/C语言的标准库函数。 void *malloc(size_t size); void...

2018-11-18 19:26:32

阅读数 17

评论数 0

系统编程——进程创建fork()函数

fork()函数: 创建一个子进程(拷贝父进程的PCB、页表,然后修改PCB中的部分数据); 声明: #include <unistd.h>  pid_t  fork(void); 返回值: 原来进程返回新进程PID,新进程返回0;出错返回 -...

2018-11-14 13:06:13

阅读数 35

评论数 0

字符串匹配算法——BF算法、KMP算法

BF算法(暴力匹配算法): 将目标串的第一个字符与模式串的第一个字符进行匹配。如果相等,则继续匹配下一个字符;如果不等,模式串回退到第一个字符再与目标串的第二个字符匹配(每次匹配错误,目标串移动一个,模式串从头开始)。 时间复杂度:O(M*N); 代码实现: int BF(char *s...

2018-11-14 00:03:28

阅读数 24

评论数 0

用于C和C++混合编程的 extern "C"

extern "C": C++语言提供,用来兼容C语言,实现C++代码调用C语言代码。extern "C"{代码段},代码段编译器会按照C语言的方式进行编译。(C++函数标识和C函数标识生成规则不同,所以在自己的环境里无法找...

2018-11-12 16:24:36

阅读数 19

评论数 0

C++内联函数

内联函数: 建议编译器在该函数被调用的地方生成函数体代码的副本,以避免函数调用的开销。但这往往会使程序变得很大。 定义:限定符inline +函数体 inline double Cube(double a) { return a*a*a; } int main() { double v...

2018-11-12 15:18:45

阅读数 18

评论数 0

C/C++函数符号生成规则(函数名的修饰);C++ 函数重载

         函数符号(函数的名字修饰):在编译阶段生成的字符串,来指明函数的定义或原型 。 C函数符号生成规则: _cdel调用约定(C标准调用约定):函数名前加下划线。 _stdcall调用约定:函数名前加下划线,函数名后加“@”符号和其参数字节。 _fastcall调用约定:函数...

2018-11-12 14:36:51

阅读数 180

评论数 0

带参数默认值的函数

带参数默认值的函数说明: 函数有一个或多个的参数有默认值;如float Area(float r = 3.5); int Sum (int a,int b = 5, int c =10)。 带参数默认值函数注意: 1、默认值参数只能放在函数声明或定义处,一般放在函数声明中。 int Fu...

2018-11-12 12:26:51

阅读数 150

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭