<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Windows_and_Linux的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Windows_and_Linux</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Windows_and_Linux]]></copyright><item><title><![CDATA[C++ jsoncpp解析json字符串]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/78478669</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/78478669</guid><author>Windows_and_Linux</author><pubDate>Wed, 08 Nov 2017 14:45:11 +0800</pubDate><description><![CDATA[使用方法
下载源码解压之后得到jsoncpp-src-0.5.0文件夹，我们只需要jsoncpp的头文件和cpp文件，其中jsonscpp的头文件位于jsoncpp-src-0.5.0\include\json,jsoncpp的cpp文件位于jsoncpp-src-0.5.0\src\lib_json。
json: json操作所需的头文件，此文件夹名字不能修改，因为lib_json目录中所对应的.]]></description><category></category></item><item><title><![CDATA[tinyxml2库的使用]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/78474767</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/78474767</guid><author>Windows_and_Linux</author><pubDate>Wed, 08 Nov 2017 09:16:52 +0800</pubDate><description><![CDATA[TinyXML2概述TinyXML2是simple、small、efficient开源的C++ XML文件解析库
优点：（1）对大部分的C/C++项目具有普适性。（2）使用较少的内存，速度变得更快。（3）没有C++的STL要求。（4）更接近现代C++的特性，使用了适当的名称空间。（5）适当有效处理了空白字符。
使用方法：将tinyxml2.cpp和tinyxml2.h拷贝至项目目录，使用时包含#in]]></description><category></category></item><item><title><![CDATA[libcurl库的使用]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/78468986</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/78468986</guid><author>Windows_and_Linux</author><pubDate>Tue, 07 Nov 2017 16:06:56 +0800</pubDate><description><![CDATA[libcurl库的使用libcurl是一个跨平台的网络协议库，支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权，HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传，代理，cookies,和用户认证。 
在基于LibCurl的程序里，主要采用callback funct]]></description><category></category></item><item><title><![CDATA[1.Android数据库的创建以及添加数据]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/52845555</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/52845555</guid><author>Windows_and_Linux</author><pubDate>Tue, 18 Oct 2016 06:32:59 +0800</pubDate><description><![CDATA[创建数据库：public class MyDatabaseHelper extends SQliteOpenHelper{} 
（1）创建数据库主要借助于辅助类SQLiteOpenHelper。使用时继承该类并实现方法onCreate()和onUpgrade()。 
（2）两个方法，getReadableDatabase()和getWritableDatabase()。这两个方法可以创建或打开一个现]]></description><category></category></item><item><title><![CDATA[Windows核心编程：内存体系结构]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44486699</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44486699</guid><author>Windows_and_Linux</author><pubDate>Fri, 20 Mar 2015 08:46:01 +0800</pubDate><description><![CDATA[1. 进程的虚拟地址空间
       每个进程都有自己的虚拟进程空间，对32位进程来说，这个地址空间的大小为4GB。因为32位指针可以表示从0x00000000到0xFFFFFFFF之间的任一值。每个进程都有字节专有的地址空间，当进程中的各线程运行时，它们只能访问属于该进程的内存。线程既看不到其他进程的内存，也无法访问它们。


        虚拟地址的分区：
空指针赋值分区，用户模]]></description><category></category></item><item><title><![CDATA[Windows核心编程：（六）用内核对象进行线程同步]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44236367</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44236367</guid><author>Windows_and_Linux</author><pubDate>Fri, 13 Mar 2015 14:40:46 +0800</pubDate><description><![CDATA[内核对象的唯一缺点是它们的性能，每一个应用内核对象的新函数，调用线程必须从用户模式切换到内核模式。 这种切换时非常耗时的，一个空的系统大概会占用200个CPU周期，但是造成内核对象比用户模式下的同步机制慢几个数量级的原因，是伴随调度新线程而来的刷新高速缓存以及错过高速缓存。


         进程内核对象在创建的时候总是处于未触发状态。当进程终止的时候，操作系统自动使进程内核对象变成触发]]></description><category></category></item><item><title><![CDATA[Windows核心编程：（五）用户模式下线程同步]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44218845</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44218845</guid><author>Windows_and_Linux</author><pubDate>Thu, 12 Mar 2015 10:53:03 +0800</pubDate><description><![CDATA[（1）原子访问：Interlocked系列函数


   该系列的函数会保证对一个值得递增操作是原子操作，即不会被打断。
（2）高速缓冲行


当CPU从内存中读取一个字节的时候，它并不是从内存中取回一个字节，而是取回一个高速缓冲行。高速缓冲行存在的目的是为了提高性能。一般来说，应用程序会对一组相邻的字节进行操作，如果所有字节都在高速缓冲中，那么CPU就不必访问内存总线，后者耗费的时]]></description><category></category></item><item><title><![CDATA[Windwos核心编程：（四）线程调度，优先级和关联性]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44216907</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44216907</guid><author>Windows_and_Linux</author><pubDate>Thu, 12 Mar 2015 08:56:34 +0800</pubDate><description><![CDATA[每个线程都有一个上下文（CONTEXT），后者保存在线程的内核对象中。这个上下文反映了线程上一次执行时CPU寄存器的状态。大约每隔20ms，Windows都会查看所有当前存在的线程内核对象，Windows在可调度的线程内核对象中选择一个，并将上次保存在线程上下文中的值载入CPU寄存器。


         线程执行代码，并在进程的地址空间中操作数据。又过了20ms，Windows将CPU寄]]></description><category></category></item><item><title><![CDATA[Windwos核心编程：（三）线程]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44199761</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44199761</guid><author>Windows_and_Linux</author><pubDate>Wed, 11 Mar 2015 15:42:05 +0800</pubDate><description><![CDATA[线程有两个组成部分：
（1）线程的内核对象，操作系统用它来管理线程
（2）线程栈，用于维护线程执行时所需的所有函数参数和局部变量。
线程只有一个内核对象和一个栈，线程描述了进程内部的一条执行线路，每次初始化线程时，系统都会创建一个主线程。系统从进程的地址空间中分配内存给线程栈使用，新线程在与负责创建的那个线程在相同的进程上下文中运行。因此，新线程可以访问进程内核对象的所有句柄，进程中的所有内]]></description><category></category></item><item><title><![CDATA[Windows核心编程：（二）进程]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44196295</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44196295</guid><author>Windows_and_Linux</author><pubDate>Wed, 11 Mar 2015 11:18:56 +0800</pubDate><description><![CDATA[一，一般将进程定义成一个正在运行的程序的一个实例，有以下两部分构成：
（1）一个内核对象，操作系统用它来管理进程。
（2）一个地址空间，其中包含所有可执行文件或DLL模块的代码和数据，还包含动态内存分配，（比如线程堆栈和堆的分配）


二，进程是有惰性的。进程要做任何事情，都必须让一个线程在它的上下文中运行。该线程负责执行进程地址空间中包含的代码。一个进程可以有多个线程，所有线程都在进程]]></description><category></category></item><item><title><![CDATA[Windows核心编程：（一）内核对象]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44196217</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44196217</guid><author>Windows_and_Linux</author><pubDate>Wed, 11 Mar 2015 11:13:21 +0800</pubDate><description><![CDATA[一：何为内核对象


      每个内核对象都只是一个内存块，它由操作系统内核分配，并只能由操作系统内核访问。这个内存块是一个数据结构，其成员维护着与对象相关的信息。


二：使用计数


     每个内核对象都包含一个使用计数，初次创建一个对象的时候，其使用计数被设为1.另一个进程获得对现有内核对象的访问后，使用计数就会递增；进程终止，操作系统内核自动递减打开的所有内核对象]]></description><category></category></item><item><title><![CDATA[用户模式下线程同步]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44100119</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44100119</guid><author>Windows_and_Linux</author><pubDate>Fri, 06 Mar 2015 15:23:47 +0800</pubDate><description><![CDATA[原子访问：指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一个时刻访问同一资源。
函数一：InterlockedExchangeAdd
原型 LONG InterlockedExchangeAdd(PLONG volatile plAddend, LONG lIncrement);
调用这个函数，传一个长整形变量的地址和另一个增量值，函数就会保证递增操作是以原子方式进行的。
高]]></description><category></category></item><item><title><![CDATA[C++ 虚函数表解析]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44084407</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/44084407</guid><author>Windows_and_Linux</author><pubDate>Thu, 05 Mar 2015 16:22:03 +0800</pubDate><description><![CDATA[前言

 
C++中的虚函数的作用主要是实现了多态的机制。关于多态，简而言之就是用父类型别的指针指向其子类的实例，然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”，这是一种泛型技术。所谓泛型技术，说白了就是试图使用不变的代码来实现可变的算法。比如：模板技术，RTTI技术，虚函数技术，要么是试图做到在编译时决议，要么试图做到运行时决议。
 
 
关于虚函数]]></description><category></category></item><item><title><![CDATA[进程间通信机制（IPC）]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/43156031</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/43156031</guid><author>Windows_and_Linux</author><pubDate>Mon, 26 Jan 2015 19:00:39 +0800</pubDate><description><![CDATA[1. 信号机制
        主要用于向一个或多个进程发异步事件信号，信号可以通过键盘中断触发，也可以有进程访问虚拟内存中不存在的地址这样的错误来产生。信号机制还可以用于shell向它们的子进程发送作业控制命令。
Linux使用存贮在每个进程task_struct结构中的信息实现信号机制，它支持的信号数受限于处理器的字长，32位字长的处理器有32种信号。
并不是系统中的每个进程都可以向其他]]></description><category></category></item><item><title><![CDATA[Linux进程]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/43153115</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/43153115</guid><author>Windows_and_Linux</author><pubDate>Mon, 26 Jan 2015 15:33:50 +0800</pubDate><description><![CDATA[概念：进程是执行操作系统中的任务。
1. 在进程的生存期内将使用许多系统资源：使用系统的CPU来运行自己的指令；使用系统的物理内存来保存自己和自己的数据；打开和使用文件子系统中的文件并直接或间接地使用系统中的物理设备。
2. 每一个进程通过一个task_struct数据结构表示，其字段可分为几个功能区：
（1）状态，随环境改变：有运行，等待，停止，死亡。
（2）调度信息：调度器需要这些信息]]></description><category></category></item><item><title><![CDATA[内存管理子系统]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/43059215</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/43059215</guid><author>Windows_and_Linux</author><pubDate>Fri, 23 Jan 2015 18:33:47 +0800</pubDate><description><![CDATA[内存管理子系统提供一下功能：
1. 大地址空间  操作系统使系统显得它有比实际上大得多的内存。


2. 保护           系统中每个进程有自己的虚拟地址空间，运行一个应用的进程不能影响其他的进程。


3. 内存映射     内存映射用来把映像和数据文件映像到一个进程的地址空间。在内存映射中，文件的内容被直接链接到进程的虚拟地址空间。


4. 公平物理内存分配  内]]></description><category></category></item><item><title><![CDATA[echo命令的输出方式]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/42971147</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/42971147</guid><author>Windows_and_Linux</author><pubDate>Wed, 21 Jan 2015 20:38:36 +0800</pubDate><description><![CDATA[echo是用于终端打印的基本命令， 在默认情况下，echo在每次调用后会添加一个换行符。
（1）用双引号
$ echo "Welcome to Bash"
Welcome to Bash
（2）不带双引号
$ echo Welcome to Bash
Welcome to Bash
（3）使用单引号
$ echo ‘Welcome to Bash’
Welcome to Bash]]></description><category></category></item><item><title><![CDATA[查询需要扫面大量行却只返回少量行解决方法]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/41700037</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/41700037</guid><author>Windows_and_Linux</author><pubDate>Wed, 03 Dec 2014 17:36:52 +0800</pubDate><description><![CDATA[1. 使用索引覆盖扫描，把所有需要用的列都放到索引中，这样存储引擎无须会表获取对应行就可以返回结果了
2. 改变库表结构
3. 重写这个复杂的查询，让MySQL优化器能够以更优化的方式执行这个查询。]]></description><category></category></item><item><title><![CDATA[使用MySQL正则表达式]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/41658727</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/41658727</guid><author>Windows_and_Linux</author><pubDate>Mon, 01 Dec 2014 22:48:59 +0800</pubDate><description><![CDATA[1. [ ] 是另一种形式的OR语句
 [123] 值匹配1或2或3
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton'
[^123]匹配除这些字符外的任何动西
匹配范围[1-9]匹配1到9的数
2. \\ . 表示查找 .
SELECT vend_name FROM vendors WHERE vend_]]></description><category></category></item><item><title><![CDATA[一些sql语句]]></title><link>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/41653059</link><guid>https://blog.youkuaiyun.com/Windows_and_Linux/article/details/41653059</guid><author>Windows_and_Linux</author><pubDate>Mon, 01 Dec 2014 21:00:18 +0800</pubDate><description><![CDATA[1. limit
限制返回的行数，例：
SELECT prod_name FROM products LIMIT 5;  指示MySQL返回不多于5行
LIMIT 5, 5指示MySQL返回从行5开始的5行。第一个数为开始位置，第二个数为要检索的行数。
行0 检索出来的第一行为行0而不是行1.因此，LIMIT 1,1将检索出第二行而不是第一行。
2. 
SELECT * FROM pr]]></description><category></category></item></channel></rss>