程序设计
文章平均质量分 81
dolphin98629
这个作者很懒,什么都没留下…
展开
-
程序设计中的计算复用(Computational Reuse)
从斐波那契数列说起我想几乎每一个程序员对斐波那契(Fibonacci)数列都不会陌生,在很多教科书或文章中涉及到递归或计算复杂性的地方都会将计算斐波那契数列的程序作为经典示例。如果现在让你以最快的速度用C#写出一个计算斐波那契数列第n个数的函数(不考虑参数小于1或结果溢出等异常情况),我不知你的程序是否会和下列代码类似:public static u转载 2015-02-07 10:39:24 · 504 阅读 · 0 评论 -
Windows中使用CRT函数检查内存泄露和溢出
C++中可以使用new或malloc等函数分配内存,通常与delete和free配合使用,但是如果不小心遗忘而程序在持续new或malloc时就会造成程序所占用的内存越来越大,即为“内存泄露”。通常写数据的时候必须在程序开辟的空间中写,如果不小心写到了不是程序请求分配的地址中,就可能覆盖别的有效数据导致程序工作不正常,最常见的就是分配一个数组结果写的时候传入的下标过大导致写超了,这就是“内存溢出”转载 2017-09-27 15:15:46 · 708 阅读 · 0 评论 -
cygwin跨平台移植 gcc+vc联合使用的方法和注意事项
前段时间做一个把linux代码移植到vc上的工程,选择cygwin环境,直接交叉编译通过。后来为了调试方便需要把源代码全部放到vc下编译,在网上搜索相关资料,发现在cygwin官方的FAQ中给出了具体的方法。下面我就里面的关键步骤做一个简单的解释:首先是官方的原文: How do I use cygwin1.dll with Visual Studio or MinGW?转载 2017-09-28 17:07:40 · 486 阅读 · 0 评论 -
glib scanner
Re: [gtk-list] Glib Lexical ScannerFrom: Tim Janik <timj gtk org>To: Gtk List <gtk-list redhat com>cc: Emmanuel DELOGET <logout free fr>, Trog <trog gtk org>Subject: Re: [gtk-l...转载 2018-04-04 16:02:02 · 434 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理
下面是一位牛人写得关于数据库索引的精品之作,因为很好,不敢修饰,转载至此与博友共享。原文链接:MySQL索引背后的数据结构及算法原理本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree...转载 2018-04-13 13:50:42 · 192 阅读 · 0 评论 -
使用def文件简化dll导出
在C++中,我们可以通过 __declspec(dllexport) 将函数导出为Dll中供其它程序使用,例如: _declspec(dllexport) int add(int a, int b);在这种方式下,如果调用该dll的是一个c++程序(同一个编译器的版本)是没有问题的。但是,如果调用该dll是一个其它语言的程序(如C#、VB),则会出错。究其原因,是因为在C++中存在函数的重载...转载 2018-05-12 11:20:29 · 346 阅读 · 0 评论 -
【善用工具】程序性能分析Gperftools初探(libwind+pprof+Kcachegrind)
gperftools性能分析通过抽样方法完成,默认是1秒100个样本,so,一个样本是10毫秒,即时间单位是10毫秒. 之所以要在这里特别说明,是因为需要注意到:如果程序运行时间不到10ms,那么得到的结果可能会和开始执行的时候不同.0.系统信息sjc@sjc-pc:~/baidu/gperftool/test$ uname -aLinux sjc-pc 3.19.0-25-generic #2...转载 2018-07-05 20:43:57 · 2697 阅读 · 0 评论 -
ring3层一种占用文件的方法(DuplicateHandle以后,把占用文件的句柄丢给系统进程,导致被占用)
前段时间,一个测试工程师问我关于怎样长时间的占用一个文件,而使别的程序无法再访问这个文件,想起以前很多病毒木马经常劫持hosts文件不放,除非你找到占用文件的程序,并强行结束掉,否则怎么也访问不了hosts文件,病毒通过劫持这个文件来达到劫持你的域名的目的,很有可能你输入了www.baidu.com,访问的却是一个带颜色的网站,并稀里哗啦在后台下了上百个病毒,扯远了,呵呵。 其实sdk里...转载 2018-12-15 10:39:50 · 341 阅读 · 1 评论 -
bind原理图释
(原文:http://blog.think-async.com/2010/04/bind-illustrated.html)本文解释了bind 是如何工作的。为了清晰,我对图中的语法作了一些简化(例如,省略函数调用操作符的参数类型),并且简化了 bind 的实现.1. bind 可以用来将用户提供的需要一个参数的函数转换成不需要参数的函数对象。绑定的值(在这个例子中是123)存储在函数对象...转载 2019-02-26 09:00:18 · 465 阅读 · 0 评论 -
C++11 中的std::function和std::bind
1. 可调用对象可调用对象有一下几种定义:是一个函数指针,参考 C++ 函数指针和函数类型; 是一个具有operator()成员函数的类的对象; 可被转换成函数指针的类对象; 一个类成员函数指针;C++中可调用对象的虽然都有一个比较统一的操作形式,但是定义方法五花八门,这样就导致使用统一的方式保存可调用对象或者传递可调用对象时,会十分繁琐。C++11中提供了std::functio...转载 2019-02-26 09:04:34 · 264 阅读 · 0 评论 -
vs2010 问题 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏问题说明:当安装VS2012之后,原来的.NET 4.0会被替换为.NET 4.5。卸载VS2012时,不会恢复.NET 4.0。l 当VS2012安装后,VS2010的cvtres.exe就无法使用了。如果你的PATH环境变量中VS2010的工具路径第一个出现,而且链接器需要将.转载 2017-09-01 10:06:10 · 235 阅读 · 0 评论 -
从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
一、缺省模板参数回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下:template >class Stack{…private: CONT c_;};如果没有传第二个参数,默认为de转载 2017-08-31 10:13:31 · 390 阅读 · 0 评论 -
typedef和typename关键字
1、类型说明typedef类型说明的格式为:typedef 类型 定义名;类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型。定义名表示这个类型的新名字。例如: 用下面语句定义整型数的新名字:typedef int SIGNED_INT;使用说明后, SIGNED_INT就成为int的同义词了, 此时可以用SIGNED_INT 定义整型转载 2017-08-30 17:28:02 · 587 阅读 · 0 评论 -
OO真经——关于面向对象的哲学体系及科学体系的探讨(上)
目录 Catelog 目录 Catelog 序言 Perface 真经第一章:世界 Waltanschauung 真经第二章:抽象 Abstraction转载 2015-02-07 13:58:37 · 536 阅读 · 0 评论 -
OO真经——关于面向对象的哲学体系及科学体系的探讨(中)
真经第六章——运作 Moving “运动是绝对的——牛顿”6.1、导言 在前五章中,我们从世界观的这话题开始,逐步引出了抽象、层次、继承和耦合。这些内容,形成了对象论中关于世界的结构体系。 然而,要想真正描述一个世界,仅有结构式不行的。开始我们说过,世界观主要关注两个方面:一是世界是什么样子的(结构),另一个就是世界时如何演进的(运作)。现转载 2015-02-07 14:18:58 · 528 阅读 · 0 评论 -
linux新定时器:timefd及相关操作函数
timerfd是Linux为用户程序提供的一个定时器接口。这个接口基于文件描述符,通过文件描述符的可读事件进行超时通知,所以能够被用于select/poll的应用场景。一,相关操作函数#include int timerfd_create(int clockid, int flags);int timerfd_settime(int fd, int flags, const str转载 2015-11-09 11:22:46 · 388 阅读 · 0 评论 -
为什么需要内存屏障
来自一篇墙外的文章,要了解如何使用memory barrier,最好的方法是明白它为什么存在。CPU硬件设计为了提高指令的执行速度,增设了两个缓冲区(store buffer, invalidate queue)。这个两个缓冲区可以避免CPU在某些情况下进行不必要的等待,从而提高速度,但是这两个缓冲区的存在也同时带来了新的问题。要仔细分析这个问题需要先了解cache的工作方式。转载 2015-09-22 14:34:00 · 1772 阅读 · 1 评论 -
眉目传情之匠心独运的kfifo
学不考儒,务掇精华;文不按古,匠心独运。Linux kernal 鬼斧神工,博大精深,让人叹为观止,拍手叫绝。然匠心独运的设计并非扑朔迷离、盘根错节,真正的匠心独运乃辞简理博、化繁为简,在简洁中昭显优雅和智慧,kfifo就是这样一种数据结构,它就是这样简约高效,匠心独运,妙不可言,下面就跟大家一起探讨学习。 一、kfifo概述本文分析的原代码版本2.6.32.6转载 2015-09-22 14:35:08 · 405 阅读 · 0 评论 -
oProfile的安装与使用
0.引言基于DPDK的发包工具的性能今天已经达到双向1900Wpps了,比昨天又高了200Wpps,正是得益于oProfile检测与调优的结果,而且今天还只是很简单的用了一下(类似于下面的示例),跟踪出对几个结构体字段的访问比较缓慢,于是对结构体字段进行了仔细的顺序调整与Cache对齐(之前急于功能实现,没顾及这些字段的排布),结果性能马上飙升了200Wpps,开心死我了。后天(明天外出办理其转载 2016-04-26 17:02:14 · 728 阅读 · 0 评论 -
R6034错误,C Runtime Error
这是我转的一篇非常全的帖子 能查到的解决方法都在里面有提及: 我是使用 stdafx.h加入这句code #pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86'转载 2017-02-04 16:20:11 · 754 阅读 · 0 评论 -
MapReduce的理解
1 什么是MapReduce? Map本意可以理解为地图,映射(面向对象语言都有Map集合),这里我们可以理解为从现实世界获得或产生映射。Reduce本意是减少的意思,这里我们可以理解为归并前面Map产生的映射。 2 MapReduce的编程模型 按照google的MapReduce论文所说的,MapReduce的编程模型的原理是:利用一个输入key/value转载 2017-02-06 09:38:14 · 626 阅读 · 0 评论 -
yang模型理解
前言继之前分享的几篇文章之后,这篇文章分享自己对于YANG模型的理解。关于其他如何搭建环境以及编写app等等请阅读下前几篇文章。一、Yang的来源早在2003年,IETF成立了一个NETCONF工作组,提出一种基于XML的网络配置管理协议,也就是NETCONF(Network Configuration Protocol),因为该协议的配置功能非常强大,同时兼顾监控和故转载 2017-02-07 09:06:52 · 47013 阅读 · 2 评论 -
Gtest源码剖析:1.实现一个超级简单的测试框架xtest
下面的代码模仿gtest实现,主要说明了以下两点:ASSERT_* 和 EXPECT_*系列断言的原理和作用. gtest是怎样通过宏自动注册测试代码让其自动运行的. 1 #include <iostream> 2 #include <string> 3 #include <memory> 4 #include <vector>...转载 2019-02-26 09:34:10 · 654 阅读 · 0 评论