- 博客(42)
- 资源 (33)
- 收藏
- 关注
转载 gdb调试fork多进程
在大多数系统,gdb对使用fork创建的进程没有进行特别的支持。当父进程使用fork创建子进程,gdb仍然只会调试父进程,而子进程没有得到控制和调试。这个时候,如果你在子进程执行到的代码中设置了断点,那么当子进程执行到这个断点的时候,会产生一个SIGTRAP的信号,如果没有对此信号进行捕捉处理,就会按默认的处理方式处理——终止进程。 当然,你可以使用时间延迟的方法,在子进程fork出
2016-03-31 18:58:32 1270
转载 apr_pool -- 内存池
这个指南主要介绍如何使用libapr(apache portable runtime)。版权所有,Copyright (C) 2005 INOUE Seiichiro ,翻译:成彦原文地址:http://dev.ariel-networks.com/apr/apr-tutorial/html/apr-tutorial.html转载时请保留版权信息。大多数libapr的API
2016-03-29 20:36:25 2763
转载 简单使用Boost线程池threadpool
场景:1.在一些多线程的程序中,比如服务端响应请求时,可以同时响应多个客户端的请求,但是响应请求的个数(即线程)的个数过多的话就会造成系统资源损耗过多而宕机,还比在做一些下载的程序时,可同时开5个下载任务,对应的其实就是线程。但是最多线程是有上限的,而且每次创建线程和销毁线程都会大量损耗资源和时间。所以解决办法之一就是使用线程池控制线程个数,复用创建过的线程。threadpool直
2016-03-29 16:43:43 18274 5
转载 查看UNIX/Linux资源占用的top命令
查看多核CPU命令mpstat -P ALL 和 sar -P ALL 说明:sar -P ALL > aaa.txt 重定向输出内容到文件 aaa.txttop命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。本文通过一个运行中的WEB服务器的t
2016-03-22 10:18:44 2475
转载 C++虚继承(十) --- 谈谈陈皓遗留的问题
网上关于c++对象布局的文章挺多,而且《深度探索c++对象模型》(Inside The C++ Object Model 侯捷 译)一书中也很详细地介绍。如果你一点都不了解C++对象的布局,我推荐你看看《深度探索c++对象模型》的第三章,如果你意犹未尽下面的两个系列都很不错:一是陈皓的《C++ 对象的内存布局》图文并貌,写得很是详细。地址是http://blog.csdn.net/haoel/
2016-03-18 17:55:30 509
转载 C++虚继承(九) --- 构造函数调用顺序的实用之处
虚拟继承是C++语言中一个非常重要但是又比较生僻的存在,它的定义非常简单,但是对于理解C++的继承机制却是非常有用的。笔者最近学习过程中发现对C++的虚拟继承不是很明朗,故在这里对虚继承做个小结。首先说下遇到的问题吧。代码如下(代码来自于何海涛《程序员面试精选100题第32题)。意图是要设计一个不能被继承的类,类似java中的final。但是又可以生成栈对象,可以像一般的C++类一样使用。
2016-03-18 17:46:04 2606
转载 C++虚继承(八) --- 虚继承与继承的差异
前面一篇文章,说明了在C++ 虚继承对基类构造函数调用顺序的影响。经过仔细推敲,发现没有彻底说清楚虚继承与普通继承之间的关系。所以用下面的文字再说明一下。首先,重复一下虚拟继承与普通继承的区别有:假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误;假设derived 虚继承自base类,那么
2016-03-18 17:43:36 863
转载 C++虚继承(七) --- 虚继承对基类构造函数调用顺序的影响
继承作为面向对象编程的一种基本特征,其使用频率非常高。而继承包含了虚拟继承和普通继承,在可见性上分为public、protected、private。可见性继承比较简单,而虚拟继承对学习c++的难度较大。首先,虚拟继承与普通继承的区别有:假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误;假
2016-03-18 17:41:59 629
转载 C++虚继承(六) --- 虚继承浅析
C++支持多重继承,这和现实生活很类似,任何一个物体都不可能单一的属于某一个类型。就像马,第一想到的就是它派生自动物这个基类,但是它在某系地方可不可以说也派生自交通工具这一个基类呢?所以C++的多重继承很有用,但是又引入了一个问题(专业术语叫做菱形继承?)。动物和交通工具都是从最根本的基类——“事物”继承而来,事物包含了两个最基本的属性,体积和质量。那么动物和交通工具都保存了基类成员变量——体积和
2016-03-18 17:38:53 411
转载 C++虚继承(五) --- 虚拟继承的概念
C++中虚拟继承的概念为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存,避免了数据不一致的问题。class 派生类名:virtual 继承方式 基类名virtual是关键字,声明该基类为派生类的虚
2016-03-18 17:36:25 416
转载 C++虚继承(四) --- /d1 reportSingleClassLayout插入看类内存布局
1 #include 2 using namespace std; 3 class base1 4 { 5 int a; 6 double b; 7 char c; 8 }; 9 int main()10 {11 base1 b;12 return 1;13 }vs输出class布局方法:先选择左侧的C/C++->命令行,然后在其
2016-03-18 17:24:24 5868 1
转载 C++虚继承(三) --- C++ 对象的内存布局(下)(陈皓)
C++ 对象的内存布局(下) 陈皓http://blog.csdn.net/haoel <<<点击这里查看上篇 重复继承 下面我们再来看看,发生重复继承的情况。所谓重复继承,也就是某个基类被间接地重复继承了多次。 下图是一个继承图,我们重载了父类的f()函数。 其类继承的源代码如下所示。其中,每个类都有两个变量,一个是整形(4字节
2016-03-18 16:44:22 1321
转载 C++虚继承(二) --- C++ 对象的内存布局(上)(陈皓)
C++ 对象的内存布局(上) 陈皓http://blog.csdn.net/haoel 点击这里查看下篇>>>前言 07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非
2016-03-18 16:42:59 493
转载 C++虚继承(一) --- vtordisp字段
关于vtordisp知多少? 我相信不少人看到这篇文章,多半是来自于对标题中“vtordisp”的好奇。其实这个关键词也是来源于我最近查看对象模型的时候偶然发现的。我是一个喜欢深究问题根源的人(有点牛角尖吧),所以当我第一次发现vtordisp的时候,我也是很自然的把它输进google查找相关资料,但是结果令我不太满意。不过,即使如此,我还是把与它相关的资料整理如下,并结合自己的理
2016-03-18 15:21:02 1275
转载 BOOST内存管理(二) --- boost::pool
Boost库的pool提供了一个内存池分配器,用于管理在一个独立的、大的分配空间里的动态内存分配。Boost库的pool主要适用于快速分配同样大小的内存块,尤其是反复分配和释放同样大小的内存块的情况。使用pool内存池主要有以下两个优点: 1. 能够有效地管理许多小型对象的分配和释放工作,避免了自己去管理内存而产生的内存碎片和效率低下问题。 2. 告别程序内存泄漏的烦恼,pool库会
2016-03-17 12:00:05 768
原创 BOOST内存管理(一) --- boost::object_pool
boost pool是个不错的库,可以省点内存管理功夫,内存池分配内存,还可以速度上比malloc更快一些。boost::object_pool主要针对,对象的内存分配,他可以像使用new 一样来创建对象,对象的内存放在object_pool里面。实际上object_pool使用pool类,代码上是object_pool继承pool类,object_pool比pool多些什么呢,多
2016-03-17 11:06:59 1179
转载 (十二)boost库之多线程高级特性
很多时候,线程不仅仅是执行一些耗时操作,可能我们还需要得到线程的返回值,一般的处理方法就是定义一个全局状态变量,不断轮训状态,就如我目前维护的一个项目,全局变量定义了N中状态,看的让人抓狂。该项目的大体逻辑是这样的,启动K个线程,当线程执行到某一个点时,进行轮训,判断是否所有线程都执行到该点,单独开启了一个线程用于轮训所有线程是否结束,待所有线程结束后会获取数据,生成一个文件,另外还有一个线程就在
2016-03-16 08:40:49 1253
转载 (十一)boost库之多线程间通信
1、互斥锁在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。#include #include using namespace std;int g_num = 0;boost::mutex mu; //定义互斥锁对象int Func(int nCount){
2016-03-15 14:40:13 1214
转载 (十)boost库之多线程
1、创建线程使用boost库可以方便的创建一个线程,并提供最多支持9个参数的线程函数,相对于void*来说,方便了很多,创建线程主要提供了一下3种方式:线程库头文件:#include a、使用全局函数作为线程执行体void Func(int nCount){ for (int i = 0; i < nCount; i++) {
2016-03-15 14:39:30 784
转载 (九)boost库之文件处理filesystem
filesystem库是一个可移植的文件系统操作库,它在底层做了大量的工作,使用POSIX标准表示文件系统的路径,使C++具有了类似脚本语言的功能,可以跨平台操作目录、文件,写出通用的脚本程序。1.path的构造函数可以接受C字符串和string,也可以是一个指定首末迭代器字符串序列区间。2.filesystem提供了一系列的文件名(或目录)检查函数。3.有丰富的函数用于获
2016-03-15 14:38:32 1863
转载 (八)boost库之异常处理
当你面对上千万行的项目时,当看到系统输出了异常信息时,你是否想过,如果它能将文件名、行号等信息输出,该多好啊,曾经为此绞尽脑汁。 今天使用boost库,将轻松的解决这个问题。1、boost异常的基本用法先看看使用STL中的异常类的一般做法:// 使用STL定义自己的异常class MyException : public std::exception{p
2016-03-15 14:38:02 5511
转载 (七)boost库之单例类
一、boost.serialzation的单件实现 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 单例,通常在一个大型项目中单例是非常常见的,boost库没有
2016-03-15 14:37:25 3250
转载 (六)boost库之内存管理shared_ptr
1、shared_ptr的基本用法 boost::shared_ptrint> sp(new int(10)); //一个指向整数的shared_ptr assert(sp.unique()); //现在shared_ptr是指针的唯一持有者 boost::shared_ptrint> sp2 = sp;
2016-03-15 14:36:50 1464
转载 (五)boost库之随机数random
boost库为我们提供了许多的日常随机数生成器:1.uniform_smallint:在小整数域内的均匀分布 2.uniform_int:在整数域上的均匀分布 3.uniform_01:在区间[0,1]上的实数连续均匀分布 4.uniform_real:在区间[min,max]上的实数连续均匀分布 5.bernoulli_distribution:伯努利分布 6.bin
2016-03-15 14:35:58 2810
转载 (四)boost库之正则表达式regex
正则表达式可以为我们带来极大的方便,有了它,再也不用为此烦恼头文件:#include 1、完全匹配 std::string str("abcd"); boost::regex reg( "a\\w*d" ); if (regex_match(str, reg)) { std::cout is match" << std::en
2016-03-15 14:35:08 1537
转载 (三)Boost库之字符串处理
字符串处理一直是c/c++的弱项,string_algo库很好的弥补了这一点。string_algo 库算法命名规则: 前缀i : 有这个前缀表名算法的大小写不敏感,否则大小写敏感 后缀_copy: 有这个后缀表明算法不变动输入,返回处理结果的拷贝,否则算法原地处理 后缀_if : 有这个后缀表明算法需要一个作为判断式的谓词函数对象,否则使用默认的判断准则s
2016-03-15 14:34:22 796
转载 (二)boost库之字符串格式化
程序中经常需要用到字符串格式化,就个人而言还是比较倾向于C格式的输出,如果只是打印日志,printf就够了,如果到生成字符串,获取你可以选择sprintf,但这些都是需要你预先分配空间的,对于一些不可预知长度的字符串格式化,就比较鸡肋了,不过还是可以实现的,如:void XString::format(const char *strFmt, ...){ va_list vl;
2016-03-15 14:33:26 815
转载 (一)boost库之日期、时间
一、计时器 计时器,通常在一个项目中统计一个函数的执行时间是非常实用的。#include void PrintUserTime(){ boost::timer t; //定义一个计时类,开始计时 std::cout 可度量的最大时间:" h" << std::endl; std::cout 可度量的最大时间:" s" << std::endl;
2016-03-15 14:32:24 713
转载 【Boost】boost库asio详解9——UDP的简单例子1
服务器:#define PACK_MAX_SIZE 16*1024class TCPConnection: public boost::enable_shared_from_this {public: static boost::shared_ptr create(IoService& ioService); tcp::socket& getSocke
2016-03-15 12:36:37 3352
转载 【Boost】boost库asio详解9——TCP的简单例子2
客户端:// Client.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include #include using boost::asio::ip::tcp;using boost::asio::ip::address;class session: public boost
2016-03-15 12:08:17 2222
转载 【Boost】boost库asio详解8——TCP的简单例子1
摘于boost官网的几个例子, 做了点小修改, 笔记之.同步客户端[cpp] view plain copy print?void test_asio_synclient() { typedef boost::asio::io_service IoService; // 该命名空间下有几个常用类: accet
2016-03-15 09:28:52 544
转载 【Boost】boost库asio详解7——boost::asio::buffer用法
1. asio::buffer常用的构造方法asio::buffer有多种的构造方法,而且buffer大小是自动管理的1.1 字符数组[cpp] view plain copy print?char d1[128]; size_t bytes_transferred = socket.receive(boost::asio::buf
2016-03-15 09:28:19 1914
转载 【Boost】boost库asio详解6——boost::asio::error的用法浅析
1. 概述一般而言我们创建用于接收error的类型大多声明如下:[cpp] view plain copy print?boost::system::error_code error 我们用这个类型去接受在函数中产生的错误, 如: [cpp] view plain copy print?s
2016-03-15 09:27:30 488
转载 【Boost】boost库asio详解5——resolver与endpoint使用说明
tcp::resolver一般和tcp::resolver::query结合用,通过query这个词顾名思义就知道它是用来查询socket的相应信息,一般而言我们关心socket的东东有address,port而已,通过tcp::resolver很容易实现设置和查询,它通过query把字符串格式的ip如192.168.0.200或主机名http://localhost,端口“8080”等转化成so
2016-03-15 09:26:52 1676
转载 【Boost】boost库asio详解4——deadline_timer使用说明
deadline_timer和socket一样,都用io_service作为构造函数的参数。也即,在其上进行异步操作,都将导致和io_service所包含的iocp相关联。这同样意味着在析构 io_service之前,必须析构关联在这个io_service上的deadline_timer。1. 构造函数在构造deadline_timer时指定时间。[cpp] view
2016-03-15 09:26:05 820
转载 【Boost】boost库asio详解3——io_service作为work pool
无论如何使用,都能感觉到使用boost.asio实现服务器,不仅是一件非常轻松的事,而且代码很漂亮,逻辑也相当清晰,这点上很不同于ACE。使用io_service作为处理工作的work pool,可以看到,就是通过io_service.post投递一个Handler到io_service的队列,Handler在这个io_service.run内部得到执行,有可能你会发现,io_services
2016-03-15 09:25:22 490
转载 用C++面向对象的方式动态加载so
这几天在写一个server,由于框架相同,仅仅是获取数据源的地方有区别,所以,研究了一下如何使用面向对象的方法来动态加载so。主要思想就是:1.通过一个函数能够获得一个基类的指针,这样在调用基类的函数的时候,就能自动调用子类的实现了。2.存储so对象的指针应该是外层类的一个static变量。详细还是看代码吧:1)首先定义一个公共的头文件,里面存储的基类的定义:(需要注意
2016-03-11 15:46:57 565 1
转载 linux下动态链接库(.so)的显式调用和隐式调用
进入主题前,先看看两点预备知识。一、显式调用和隐式调用的区别 我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使用的动态库文件(.so文件),而使用静态库的程序一旦编译好,就不再需要依赖的静态库文件了(.a文件)。
2016-03-11 15:46:10 2374
转载 C语言struct中冒号用法
typedef struct{unsigned char unused_bits:4;unsigned char wchair_state:2;} xyz; typedef struct{unsigned char unused_bits;unsigned char wchair_state;} abc;
2016-03-09 09:17:18 857
SSDTHook实现进程保护
2017-06-09
SkinSharp开发库+百款皮肤+皮肤编辑器
2017-05-24
minhook-1.3.2
2017-05-09
python2.7.8 32
2016-05-25
AStar 算法实例
2015-07-18
Visual Assist X补丁
2015-06-18
cmake-3.14.3-win64-x64.zip
2019-09-05
跨平台高性能TCP服务器框架 &boost;
2018-06-25
网狐IOCP压缩版
2018-06-22
用C++实现的壳
2017-09-14
像加载DLL一样加载EXE
2017-09-10
protobuf-2.61最新版
2017-08-28
Gh0stVC6到VS2010迁移所有问题的解决方法
2017-08-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人