- 博客(39)
- 收藏
- 关注
原创 MySQL总结
1.什么是数据库存储引擎?MySQL中的数据用各种不同的技术存储在文件(或者内存)中。存储引擎是针对文件的一种存取控制机制,通过使用不同的存储方式、索引技巧、锁机制最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。2.数据库的事务数据库中一组原子性的SQL语句的集合,彼此之间状态一致,具有A(原子性)C(一致性)I(隔离性)D...
2019-08-13 17:28:40 215
原创 进程间通信方式(四)----------------信号量
信号量是3个XSI IPC机制中的最后一个个。如想了解XSI IPC可点击XSI IPC信号量与已经介绍过的IPC机构(无名管道、有名管道、消息队列、共享内存)不同。它是一个计数器,用于多进程对共享数据对象的访问。为了获取共享资源,进程需要进行下列操作:(1)测试控制该资源的信号量。(2)若此信号量的值为正,则进程可以使用该资源。进程将信号量的值减1,表示它使用了一个资源单位。...
2019-08-01 13:26:38 301
原创 进程间通信方式(三)----------------共享内存
共享内存是3个XSI IPC机制中的第二个。如想了解XSI IPC可点击XSI IPC它允许两个(或更多)不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间传递数据的一种非常有效的方式。大多数共享内存的具体实现,都把由不同的进程之间共享的内存安排为同一段物理内存。由于数据不需要在客户进程和服务器进程之间复制,所以这是最快的一种IPC。共享内存是由IPC为进程创建的一个特...
2019-07-28 17:55:13 327
原创 进程间通信方式(二)----------------消息队列
XSI IPC有三种IPC我们称作XSI IPC,即消息队列、信号量以及共享内存,它们之间有很多相似之处,具体可以查看XSI IPC相同特征这篇博客主要讲述它们的不同之处:消息队列消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。如图:消息队列与命名管道有许多相似之处,但少了在打开和关闭管道方面的复杂性。但使用消息队列并未解决我们在使用命名管道时遇到的问题...
2019-07-28 13:52:45 255
原创 XSI IPC相同特征
有三种IPC我们称作XSI IPC,即消息队列、信号量和共享内存,它们之间有很多相似之处。本篇博客主要介绍它们相似的特征,若想了解它们的不同之处,可以查看消息队列、信号量、共享内存一、标识符和键每个内核中的IPC结构(消息队列、信号量、共享内存)都用一个非负整数的标识符加以引用。例如:为了对一个消息队列发送或者获取消息,只需要知道其队列标识符。与文件描述符不同,IPC标识符不是小的整...
2019-07-28 13:52:04 224
原创 进程间通信方式(一)----------------有名管道、无名管道
UNIX系统 IPC 是各种进程通讯方式的统称。在讲进程通讯之前,先带大家了解一下Linux都有哪些进程间通讯的方式?1.无名管道2.命名管道3.消息队列4.共享内存5.信号量6.信号7.socket本篇博客先讲述无名管道以及命名管道。无名管道(1)历史上,他们是半双工的(即数据只能在一个方向上流动)。现在,某些系统提供全双工管道。(2)他们只能在具...
2019-07-28 13:46:50 249
原创 进程
什么是进程呢?进程就是处在执行期的程序,这句话听起来很抽象,不过,一般来说Linux系统中的进程抽具备以下要素:(1)有一段程序供其执行,就像一场戏要有一个剧本一样。这段程序不一定是进程专有的,可以与其他进程共用,就好像不同剧团的演出可以用一个剧本一样。(2)有起码的“私有财产”,这就是进程专用的系统堆栈空间。(3)有“户口”,这就是在内核中的一个task_struct 数据结构,...
2019-07-27 18:45:30 237
原创 X86系列 CPU 内存管理
所谓X86系列,是指Intel从16位微处理器8086开始的整个CPU芯片系列,系列中的每种型号都保持和以前的各种型号兼容,主要有8086、8088、80186、80286、80386、80486以及以后的Pentium芯片。在X86系列中,8086和8088是16位处理器,而从80386开始为32位处理器,80286则是该系列从8088到80386,也就是从16位到32为过渡时的一个中间步骤...
2019-07-25 16:10:46 883
原创 I/O复用
什么是I/O复用? 什么是I/O复用(I/O multiplexing)呢?具体点就是当你编写的程序需要同时处理多个描数字(socket或file或device),你又不知道什么时候应该(比方说有数据可以读了)去操作(读/写)哪个描数字。这时候I/O复用就需要登场了。 I/O复用是一种让进程预先“警告”内核能力,使得内核一旦发现进程预先告知时指定的一个或多个I/O条件...
2019-04-27 17:23:22 580
原创 普通继承与虚继承关系下派生类的内存布局
普通继承 基类、派生类中都不含所有虚函数 例:#include<iostream>using namespace std;class A{public: A(int a):ma(a){} void Show() { cout<<"A::Show()"<<endl; }protected: int ma;};class...
2019-01-29 19:46:36 388 1
原创 C++多态
C++多态性: 简单理解“一个接口,多种方法”。调用同一个方法,完成不同的功能。多态的分类多态的分类的依据只是在什么时候将函数实现和函数调用关联起来,是在编译时期还是运行时期,即函数地址是早绑定还是晚绑定的?静多态:指在编译期间就可以确定函数的调用地址,并生产代码,这就是静态的,也就是说地址是早早绑定的,静态多态也往往被叫做静态联编。 动多态:指函数调用的地址不能在编译器期间确定...
2019-01-17 18:49:17 320
原创 运算符重载
在c++中我们可以使用int a=10;int b=20;int c=a+b;我们知道int类型相加即为将变量中的值相加,a+b=30;这是由于编译器编译系统在内部重载了内置类型的加法运算,这种重载的实质是函数重载,即int operator+(int,int)但是编译系统只能对内置的类型进行函数重载。那么如果变量的类型是类类型呢?如:#include<ios...
2019-01-17 18:48:49 245
原创 C++构造函数的初始化列表
构造函数的初始化列表当一个类的成员变量是另一个类的对象时例:#include<iostream>using namespace std;class A{public:A(){ cout<<"A()"<<endl;} A(int x){ this->x=x; cout<<"A(int x)"&l
2018-12-05 17:30:41 3401 1
原创 临时对象
临时对象分为显式生成和隐式生成一般没有引用时,临时对象在表达式结束后生命周期结束。显式生成临时对象显式生成即在生成临时对象时注明临时对象的类型即 Node n1; n1=Node(10); 隐式生成临时对象隐式生成即在生成临时对象时并不注明对象的类型,需要编译器的推算。 即 Node n1; n1=10;显式生成临时对象与隐式生成临时对象的区别...
2018-12-03 15:27:19 1238 4
原创 C++类中的6个默认函数之构造函数、析构函数、拷贝构造函数、赋值运算符重载函数
类中6个默认函数,如果在定义类时没有定义这6个函数的某几个,编译器会提供相应的默认函数,如果定义了这6个函数的某几个,编译器则不会提供相应的默认函数,系统提供的这6个默认函数都是公有的,都是内联的构造函数 析构函数 拷贝构造函数 赋值运算符重载函数 取地址操作符重载函数 const修饰的取地址操作符重载函数 构造函数 1.构造函数与类名相同,并且没有返回值 2...
2018-11-30 22:46:05 820
原创 类与对象
C++的三大特征:封装、继承、多态封装: 封装可以隐藏实现细节,使得代码模块化封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。在面向对象编程上可理解为:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏所有的 C++ 程序都有以下两个基本要素:程序语句(代码):这是程序中执行动作的部分,它们被称为函数。 程序数据...
2018-11-26 15:54:04 103
原创 const 与引用、指针、形参结合
引用:引用(&)与类型结合在一起,相当于给变量起别名,(引用不参与类型)底层以指针的方式来支持使用,在引用使用的地方,系统自带解引用的过程。例: int a=10;int &b=a;//给变量a起别名叫b, 相当于int *b=&a;b也要开辟内存,因为底层实现时p是一个指针b=20; //自带解引用 相当于*b=20;引...
2018-11-25 21:56:49 556
原创 函数堆栈调用
关于函数的调用堆栈有如下几个问题:1.形参开辟内存吗?由谁开辟?2.形参的入栈顺序?3.返回值如何带出?4.被调用方结束后如何知道回退到调用方栈帧上?5.函数调用完成如何知道执行下一行指令?测试用例:#include<stdio.h>typedef struct Node{ int data[1];}Node,*PNode;Node fun(...
2018-11-23 21:46:56 567
原创 2048小程序
#include<stdio.h>#include<stdlib.h>#include <conio.h>#include<assert.h>#define N 4void Print(int (*arr)[N],int n)//输出{ system("cls"); for(int i=0;i<n;i++) { f...
2018-09-10 15:44:42 585
原创 指针运算
#include<stdio.h>int main(){ int a[4]={2,3,2,3}; int *p1=(int *)&a+1; int *p2=(int *)((int)a+1); printf("%x,%x\n",*(p1-1),*p2); return 0;}解析:p1:(int *)&a=a;(int *)&...
2018-09-10 15:42:11 115
原创 逆序
一.数组逆序例:arr[10]={1,2,3,4,5,6,7,8,9,10},将其逆置使得arr[10]={10,9,8,7,6,5,4,3,2,1};#include<stdio.h>template<typename T>void Inverse(T *arr,int n){ T tmp; for(int i=0;i<n/2;i++) {...
2018-09-10 15:40:01 257
原创 数组元素移动中内存重叠
一.将整形数组arr中,后面m个数移动到前面,前面n-m个数移动到后面假设arr数组长度为10,其中元素为{1,2,3,4,5,6,7,8,9,10},m=3;先将后面这m个元素保存起来,int *p=(int *)malloc(m*sizeof(int));for(int i=0;i<m;i++){p[i]=arr[n-m+i];}然后从右边往左依次将这n-m个元素向右移动m个格子,(不能...
2018-05-14 23:24:03 342
原创 字符串常量与字符数组在赋值交换中的区别
char str1[]="abcdef";char str2[]="qstr1 和str2 的地址都在栈里,如果要交换str1和str2的值只需char *p=(char *)malloc(siz)
2018-05-14 23:22:30 1394 1
原创 魔方阵
1、奇数阶幻方 n为奇数 (n=3,5,7,9,11……) (n=2*k+1,k=1,2,3,4,5……) 奇数阶幻方最经典的填法是罗伯特法(也有人称之为楼梯方)。填写方法是这样: 把1放在第一行正中; 按以下规律排列剩下的n*n-1个数: (1)、每一个数放在前一个数的右上一格; (2)、如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列; (3)、如果这个数所要放的格已经超...
2018-05-14 23:19:38 125
原创 已知对齐系数和未知对齐系数结构体如何内存对齐
一.内存对齐:许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址是某个数k(通常要求为4或8的倍数),这就是所谓的内存对齐。二.内存对齐优点:1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2.性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了...
2018-05-06 16:59:53 399
原创 struct,typedef struct结构体
一.struct 结构体框架 : struct 类型名{ };例:struct Student{char name[20];int age;};结构体自定义数据类型,定义完成后等同于内置类型。1.结构体不能定义一个自身的普通成员,但可以定义一个指向自身的指针。例:struct Student{char name[20];int age;};struct A{struct Stu...
2018-05-05 18:38:39 675
原创 变量的属性(生命周期、作用域、默认值、内存区域、链接属性)
一.全局变量:定义在函数外部生命周期:从程序运行开始创建,程序退出销毁作用域:从定义该变量开始一直到文件的结束默认值:0内存区域:全局(静态)变量区链接属性:外部(可以在其他文件中引用)例:在max.cpp中定义全局变量int a=10; 若在min.cpp中调用a,使用extern int a就能声明全局变量a,然后就可以使用a二.静态全局变量:定义在函数外部 与全局变量区别:定义时...
2018-04-26 22:34:09 593 1
原创 动态内存创建与释放
使用时应加上头文件 #include<stdlib.h>一.申请动态内存申请动态内存:malloc/calloc/realloc,申请的动态内存分为多少份此函数无法明确,所以应在malloc/calloc/realloc前面加上类型1.mallocmalloc函数的形参为所要申请的动态内存字节数(动态数组总共所占字节数),若申请成功,此函数会将申请的动态连续内存(动态数组)的首地址返回...
2018-04-22 15:52:19 708
原创 二维数组与一维数组在应用中的区别
我们在将一个整型的一维数组名作为函数形参时常常使用 int arr[]或int *arr[],但在将一个整型的二维数组名作为函数形参时使用int brr[][]却错误,这是为什么呢?下面我们将一维和二维数组将以区分:由此我们知道一维数组中arr它是一个指向整型元素的指针,而brr它是一个指向整型的一维数组的指针(数组指针),而不是指向整型元素元素地址的指针,因此我们在使用二维数组作为函数形参时应注...
2018-04-19 20:36:24 4993 1
原创 char * 与char []区别
char *str1="abcde"; //字符串常量char str2[]="abcde"; //字符数组也是字符串执行str1[0]='X'; (1)str2[0]='X'; (2)当执行(1)时程序崩溃,执行(2)时正常主要因为:char *str1="abcde" str1在栈区,"abcde"在常量区cha...
2018-04-13 13:31:37 283
原创 已知两数和两数之积,推断这几个数为几进制?
例:假设在n进制下,下面的等式成立,567*456=150216,n的值为?A:9B:10C:12D:18解析:由题意得:(5n^2+6n+7)*(4n^2+5n+6)=n^5+5n^4+2n^2+n+6 展开,得 20n^4+49n^3+88n^2+71n+42=n^5+5n^4+2n^2+n+6 ...
2018-04-09 23:44:07 373
原创 const基本用法
const定义常变量后,该变量没有写权限,只有读权限①const用于定义常变量时,要进行初始化例如:const int a=10; //合法而const int a; //非法②数据类型对于const而言是透明的例如:const int a=10; 等价于 int const a=10;const int *p1=&a;等价于int const *p1=&a; 但不等价于...
2018-04-09 23:43:38 29642 14
原创 指针的简单运算
一.指针加(减)数字指针+(-) 1,指针向前(向后)移动一个单元格指针加(减)数字,指针需要调整,而调整的权重为:数字*sizeof(指针去掉一个*) int arr[10]; 假设arr首地址为xint *p=&arr; //p==&arr[0] p==x;p++; //p==&a[1] ...
2018-04-09 23:42:24 212
原创 指针简单用法
指针的大小因操作系统而定,但在同一操作系统下所有指针长度一致32位操作系统指针长度为4个字节64位操作系统指针长度为8个字节1.指针在函数内部使用时①.指针==地址②.获取任何变量的地址都是:&变量名③.*指针变量名,则间接访问到指针所指的变量例如:#include<stdio.h>int main(){ int a=10; int *p=&a; int *...
2018-04-07 16:32:48 440
原创 推算整数问题
给一个整数,要求:① 求出他是几位数② 分别输出每一位数字③ 按逆序输出各位数字① 解析:假设整数为n,第一步:/10 将最低位丢弃;第二步:重复第一步,直到为0为止,统计总共可以丢弃的次数.例如:1234第一次 1234/10------12第二次 123/10------12第三次 12/10------1第四次 1/10------0#include<stdio.h>int...
2018-03-27 11:45:09 167
原创 斐波那契数列第N项
#include<stdio.h>int FibonacciSequence(int n){ int f1=1; int f2=1; int f3=1; for(int i=3;i<=n;i++) { f3=f1+f2; f1=f2; f2=f3; } return f3;}int main(){ for(int i=1;i<7;i+...
2018-03-26 23:55:08 250
原创 求两个正整数的最大公约数
辗转相除法#include<stdio.h>int GreatestComDiv(int m,int n){ int r; while((r=m%n)!=0) { m=n; n=r; r=m%n; } return n;}int main(){ printf("%d\n",GreatestComDiv(12,15)); printf("%d\n",...
2018-03-26 22:20:33 246
原创 for,while,do while三种循环比较
一.for循环for(表达式1;表达式2;表达式3){ 语句块1;}表达式1:初始化循环因子,最早被执行,只执行一次表达式2:判断,每次进入循环前都要进行判断,每次都执行表达式3:步进,修改循环因子的值(在执行完语句块1后才执行),每次都执行语句块1:执行0次或以上例如:#include<stdio.h>int main(){ int i; for(i=0,p...
2018-03-23 19:00:46 14693 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人