自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (1)
  • 收藏
  • 关注

转载 myisam和innodb索引实现的不同

转载:http://www.2cto.com/database/201211/172380.html myisam和innodb索引实现的不同MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引(

2016-03-26 20:27:22 869

转载 编译器的工作过程

转载:http://www.ruanyifeng.com/blog/2014/11/compiler.html源码要运行,必须先转成二进制的机器码。这是编译器的任务。比如,下面这段源码(假定文件名叫做test.c)。#include stdio.h>int main(void){ fputs("Hello, world!\n", stdout);

2016-03-26 17:33:49 705

原创 c 程序必须要从main函数开始执行么?

这是在面试中被问到的一个问题,回答了是。这问题第一感觉答案就是否定的,一时也没想出来理由只能回答了是。当时太紧张了,其实回想一下汇编语言就该想到程序的入口地址是可以指定的,c语言编译器默认以main作为入口地址。网上查阅后,发现了 __attribute__ 这个关键字,它可以设置函数属性,变量属性,类型属性。参考:http://www.cnblogs.com/Anker/p/3462363.htm

2016-03-25 14:23:32 9706

原创 C++为什么要引入静态成员函数

在静态成员函数出来之前就已经有了静态成员变量。静态成员变量是为了为用户提供在类级别上访问,而不是类对象有关的数据。静态成员变量在编译期就存在了,而不像非静态成员变量只有实例化了对象才会给分配内存。静态成员变量是所有类对象共享的,例如,我们可以为类定义一个 static int n 来统计实例化了多少个对象,对象构造时 n++ , 析构时 n– 。但是,如果为类定义的静态成员变量是私有的(不希

2016-03-14 14:39:59 2930 1

原创 c++对象模型

参阅: http://blog.csdn.net/ljianhui/article/details/46408645环境:ubuntu15.04 、 gcc编译器做个简单的笔记: 类内只保存非静态数据成员变量和虚函数表指针,虚函数表中按声明顺序依次保存所有的虚函数指针。其他的静态成员和静态成员函数、非静态成员函数在类外保存。注:vptr 表示指向虚函数表的指针单独的类多继承布局:

2016-03-14 08:46:59 694

原创 GDB调试多线程及死锁

参考文章:http://www.cnblogs.com/zhuyp1015/p/3618863.html我在这里总结一下:查看正在执行的所有线程 info threads切换到指定线程 thread ID //这里的ID是info threads后各线程前面的序号 break thread_test.c:123 thread all //在所有线程中相应的行上设置断点

2016-03-10 17:47:32 2008

原创 初识protobuf

这里(IBM)给出了protobuf的基本介绍和原理http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/安装 开始按照上面IBM给出的文档安装了protobuf3.0版本,但是装完后生成的 .pb.cc 和 .pb.h 代码无法编译链接。不知道是静态链接库的问题还是源码包的问题。于是按照下面这篇博客成功安装了 protobuf2.6.1 。h

2016-02-22 13:04:41 1011 2

原创 C++的一些笔记

发现一些小的知识点长期不用都得忘,决定再次遇到了一定要记录一下。const 成员函数const对象只能调用const成员函数。const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误在const函数中调用非const成员函数是语法错误 任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它

2016-01-28 19:42:54 750

原创 C语言一些少见但很有用的语法

在阅读一些项目的源代码时,遇到了一些我平时很少见,但发现很有用的C语言语法,在此整理一下。#undef我们平时用的都是#define,突然遇到了这个。。。其实,#undef 与 #define 相对应。#undef 的作用是取消已经有的宏定义。#include<stdio.h>#define MAX 5int main(){#undef MAX// printf("%d\n

2016-01-27 23:23:52 1005

转载 修改终端命令提示符颜色

转载:http://www.centoscn.com/CentOS/2013/0418/321.html相信很多人已经看厌了Linux已成不变的命令提示符的颜色,多数人要么使用默认的绿色,要么在使用PUTTY的时候设置成绿色的,不知道是否有人想到提示符可以设置成其他的颜色呢,本文就说明命令提示符变量PS1的设置。1、PS1变量简介PS1是Linux终端用户的一个环境变量,用

2016-01-11 21:05:50 3893

原创 libevent安装

查看是否已安装ls -al /usr/lib |grep libevent没有输出说明未安装下载进入官网 http://libevent.org/ 我下载的是:libevent-2.0.22-stable.tar.gz 解压tar -zxvf libevent-2.0.22-stable.tar.gz 编译安装进入解压目录cd libevent-2.0.22-stable/编译安装./config

2015-12-18 12:26:49 986 2

原创 查找含有某字符串的所有文件(grep)

比如想要查询当前目录下哪个文件中含有字符串 “PAGE”:grep -n "PAGE" *-n 显示行号*   表示匹配所有文件-r  递归查找参阅:http://151wqooo.blog.51cto.com/2610898/1162118

2015-12-17 22:47:19 941

原创 追踪系统调用流程

前言   我不是专业的内核研读者,只因自己的好奇心,想一探(IO多路复用)select系统调用的实现原理,于是一路追踪到其内核的底层调用。特此记录这一段学习过程。本机系统:ubuntu15.04 内核版本:3.19.0-29-genericsys_select 哪去了?   当用户态使用系统调用的时候,操作系统会根据该函数的系统调用号找到其对应的底层函数(前缀 sys_ )去执行。比如当用户调用下

2015-12-16 20:47:02 1280

原创 Linux异步IO+实例(POSIX IO与 libaio)

异步IO基本API API函数 说明 aio_read 异步读操作 aio_write 异步写操作 aio_error 检查异步请求的状态 aio_return 获得异步请求完成时的返回值 aio_suspend 挂起调用进程,直到一个或多个异步请求已完成 aio_cancel 取消异步请求 lio_list 发起一系列异步I/O请求上

2015-12-14 20:55:01 6416

原创 LinuxC多线程求和

我们要实现的是,使用多线程来计算 1 ~ n 范围的所有整数和。计算运行时间  因为要将普通求和程序与多线程作比较,所以先介绍一下如何计算程序运行的时间。获取时间函数:#include<sys/time.h>int gettimeofday(struct timeval*tv, struct timezone *tz);参数: 其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果。tz

2015-12-03 23:37:42 5168 1

原创 Linux用户管理

useradd新建用户test (不创建主目录) sudo useradd test新建用户test (并创建主目录等信息) sudo useradd -m -s /bin/bash test查看/etc/passwd查看/etc/shadow设置用户密码再看/etc/shadow新建用户(一次性配好所有环境) sudo adduser test删除用户 sudo userd

2015-12-03 15:18:58 852

原创 父子进程ID和进程收养问题(init与upstart)

本文链接:http://blog.csdn.net/lyh__521/article/details/50148025孙子进程的父进程是谁?为了方便描述,这里将子进程中创建的子进程称为孙子进程。测试代码:/* * getpid() 获取当前进程PID * getppid() 获取父进程的PID */#include<stdio.h>#include<stdlib.h>main(){

2015-12-02 14:39:03 2751 1

原创 64位系统下进程的内存布局

环境操作系统:ubuntu15.04物理内存:4G测试程序#include<stdio.h>#include<stdlib.h>int a;int b=1;main(){ int n = 0; char *p1 = NULL; char *p2 = NULL; const int s = 10; p1 = (char*)malloc(200

2015-12-01 23:59:30 8553

原创 测试栈空间的大小

比如局部变量是保存在栈空间中的,今天突然在想栈的上限是多大呢,什么时候才会栈溢出?ulimit 命令linux下使用ulimit 命令可以查看系统的很多上限值。ulimit -a 查看所有ulimit -s 查看栈空间的大小可以看到系统设置栈的上限是8M测试现在我们写个程序测试一下两种方法:1、第一种方法:最简单的是在函数或直接在main()函数里定义多个局部变量。局部变量一定要初始化,

2015-11-30 17:22:11 11173

原创 64位系统下gcc按照32位编译c程序

有时候我们需要测试c代码在32位环境下的运行结果,这时候就需要gcc按照32位来编译c了。1、 安装sudo apt-get install lib32readline-gplv2-dev2、编译。加 -m32 参数gcc -m32 hello.c

2015-11-30 15:59:07 7034 1

原创 进程间通信ipcs、ipcrm命令

创建了消息队列后,如果没有主动删除,或者程序不正常退出,那么消息队列会滞留在内核中,不断累加白白占用资源,直到操作系统重启。于是查询了,ipcs 和 ipcrm 命令,同时了解了其他用法。ipcs 命令查看消息队列、共享内存、信号量的相关信息。用法:ipcs -a (默认)输出全部信息,消息队列、共享内存段和信号量ipcs -m 只输出共享内存段信息ipcs -s 只输出信号量信息

2015-11-29 17:00:21 1092

原创 从汇编语言的角度看清数组名和指针变量的区别

当初学c语言总感觉数组名和指针之间有种说不清道不明的关系,两者很像,但是又有着解释不清的区别。数组名和指针的区别用常量初始化字符数组和指针变量

2015-11-27 14:30:18 3257

原创 学习红黑树

原文链接http://blog.csdn.net/lyh__521/article/details/49909953什么是红黑树?     其实,红黑树就是一棵二叉查找树。掌握红黑树的性质,用处,黑高度,时间复杂度,旋转操作,插入、删除

2015-11-18 17:13:28 1267

原创 BST二叉查找树

博客链接:http://blog.csdn.net/lyh__521/article/details/49811149介绍如图1就是一颗二叉排序树,也就是二叉查找树,又称二叉搜索树,简称BST 二叉排序树包含以下域: 成员 含义 left 指向左孩子 right 指向右孩子 key 关键字 parent 指向父结点特点前趋,后继,插入,删除

2015-11-13 01:44:26 1184

原创 由一个线程例子引发的思考

原文链接:http://blog.csdn.net/lyh__521/article/details/49759111  在谈这个例子之前先贴上进程与线程的内存结构,方便对线程有一个更深的理解。(如果觉得前面的介绍很烦,可以直接跳到最后看问题的分析和最终解决方法的代码)进程的内存结构下图是在Linux/x86-32中典型的进程内存结构,从图中的地址分布可以看出,内核态占1G空间,用户态占3G空间

2015-11-10 14:10:59 3691

原创 Linux信号介绍

原文链接:http://blog.csdn.net/lyh__521/article/details/49646927   信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间唯一的异步通信方式。信号来源硬件方式 用户在终端按下某些键。如 Ctrl+C硬件异常。如:除数为0、无效的存储访问等。这些事件由CPU检测到,然后通知给内核,由内核生成相应的信号,并把信号发送给

2015-11-04 23:22:32 934

原创 C++重载复合赋值运算符、算术运算符和关系运算符

原文链接:http://blog.csdn.net/lyh__521/article/details/49622601复合赋值运算符  形如‘*=’、‘+=’、‘/=’等这样的运算符称为复合赋值运算符,它们其实是算术运算和赋值运算的结合,即先执行算术运算,得到的值再赋值给左侧对象。重载复合赋值运算符:赋值运算符必须定义为类的成员,复合赋值运算符通常也应该定义为成员函数(但并不是必须这样)。复合赋

2015-11-03 21:35:54 7465

原创 重载输入输出运算符

原文链接:http://blog.csdn.net/lyh__521/article/details/49601489重载输入输出运算符 我们平时可以用流 std::cout<<str<<n ; std::cin>>str>>n ; 输出、输入字符串和整型等内置类型的值。但是对于我们自定义的类,比如 Student 类,却不能直接通过 cout<<Student 或 cin>>Student 这

2015-11-03 01:15:49 19636 1

原创 C++重载运算符函数需知

原文链接:http://blog.csdn.net/lyh__521/article/details/49592975基本概念 重载的运算符是具有特殊名字的函数: (1) 名字由关键字 operator 和其后要定义的运算符号(+、-、/、* 等组成); (2) 和其他的函数一样,也包含返回类型、参数列表以及函数体。对于二元运算符来说,左侧运算对象传递给第一个参数,而右侧运算符传递给

2015-11-02 22:13:46 1246

原创 free 引发的思考

原文链接:http://blog.csdn.net/lyh__521/article/details/49539011先看两个例子:(1)#include<string.h>#include<stdio.h>#include<stdlib.h>int main(){ char *p; char *q; p = (char*)malloc(20); // 给p开辟

2015-11-01 00:01:19 875

原创 Linux监控网络流量和限制网卡速率

限制网卡速率工具:wondershaper ubuntu 下安装sudo apt-get install wondershaper 使用sudo wondershaper wlan0 10 5000# wlan0 是要限制的网卡,10 是下载速率,5000 是上传速率清除设置sudo wondershaper clear wlan0监控网络流量工具:slurm安装sudo a

2015-10-20 21:51:14 5425

原创 Linux下使用dosemu写汇编

原文链接:http://blog.csdn.net/lyh__521/article/details/49010397ubuntu下安装dosemu (同类软件还有dosbox)模拟Dos环境sudo apt-get install dosemu安装汇编器和链接器运行sudo dosemudosemu 下看到的C盘和D盘只是虚拟出来的,对应的目录在~/.dosemu/drives 下:执行命

2015-10-09 23:51:12 2631

原创 ubuntu彻底清除Apache+Mysql+PHP

参考: http://www.cnblogs.com/kuyuecs/archive/2011/11/08/2241138.html http://www.phpxs.com/post/1405

2015-09-17 02:58:42 888

原创 hello,world初学汇编

绝大多数 Linux 程序员以前只接触过DOS/Windows 下的汇编语言,这些汇编代码都是 Intel 风格的。但在 Unix 和 Linux 系统中,更多采用的还是 AT&T 格式。以下分别是这两种风格的汇编代码和汇编方法。1、工具Linux 平台下的汇编工具虽然种类很多,但同 DOS/Windows 一样,最基本的仍然是汇编器、连接器和调试器。汇编器  汇编器(assembler)的作用是将

2015-09-14 21:06:32 1044

原创 程序的处理过程

1、内存   内存也称主存,是指CPU能直接存取指令和数据的存储器。磁盘、磁鼓和磁带等存储器,一般称为外存或辅存。计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每字节都有一个唯一的物理地址。第一个字节的地址为0,接下来的字节地址依次为1、2、3 ……。对内存的访问是通过一系列对指定地址单元进行读或写来实现的。例如从物理地址2处取出一个double(8个字节):

2015-09-09 00:48:08 2305

原创 Mysql使用记录

一、安装mysql(ubuntu)1、安装sudo apt-get install mysql-serversudo apt-get install mysql-clientsudo apt-get install libmysqlclient-devsudo netstat -tap | grep mysql 如果是LISTEN状态说明安装成功ubuntu15.04? 对于ubun

2015-09-03 21:08:12 953 1

原创 Linux常用命令记录

1、递归修改文件或目录权限修改目录下所有文件权限 find /path -type f -exec chmod 644 {} \; //path是目录,f 表示只选择文件,{}与\之间有空格,后面加;修改目录下所有子目录权限 find /path -type d -exec chmod 644 {} \; //d表示只选择目录2、更改用户目录下文件夹为英文名称在终端依次执行如下

2015-09-03 16:15:16 478

转载 linux-Tcp IP协议栈源码阅读笔记

本文转自:http://blog.csdn.net/cz_hyf/article/details/602802sockettcpstreamstruct网络数据结构 一.linux内核网络栈代码的准备知识 1. linux内核ipv4网络部分分层结构: BSD socket层: 这一部分处理BSD socket相关操作,每个socket在内核

2015-08-11 16:07:22 832

转载 关于头文件重复包含以及函数重定义问题

转载:http://blog.chinaunix.net/uid-23634108-id-2393493.html调试的问题出现这个问题还蛮奇怪的,a.h需包含statistic.h, main.c需包含a.h和statistic.h,导致了statistic.h重复包含,hsdm_queue_ctr重复定义。 关于重复包含和重复定义的问题,可根据下面的分析得到认识。 

2015-08-06 00:09:24 4019

原创 linux下使用C++ Json库

1、下载JsonCpp http://sourceforge.net/projects/jsoncpp/files/ 2、下载scons http://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.tar.gz/download3、解压scons-2.1.0.tar.gz tar -zvxf scons-2.1.0

2015-08-04 15:21:11 5621

汇编器和链接器

用于linux下安装dosemu,下载解压后放在~/.dosemu/drivers/d/bin/目录下即可

2015-10-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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