05 2010 档案
摘要:1 概念介绍哈夫曼编码是一种最优的前缀编码技术,然而其存在的不足却制约了它的直接应用。首先,其解码时间为O(lavg), 其中lavg为码字的平均长度;其次,更为最重要的是,解码器需要知道哈夫曼编码树的结构,因而编码器必须为解码器保存或传输哈夫曼编码树。对于小量数据的压缩而言,这是很大的开销。因而,应用哈夫曼编码的关键是如何降低哈夫曼编码树的存储空间。Faller[1973]提出的自适应哈夫曼编码技术使哈夫曼编码树的存储空间降为零,即在使用某种约定的情况下,解码器能动态地重构出和编码器同步的哈夫曼编码树,而不需要任何附加数据。这样做的代价便是时间开销的增大。另一种技术是编码器和解码器使用事先约
阅读全文
摘要:转自:http://blog.sina.com.cn/s/blog_4e19c4c80100ghk3.html 在大部分介绍JPEG的中文书中都是将全部的JPEG的霍夫曼表给出,可是实际的JPEG文件头并不长,这个使得初看者很迷惑,这么短是如何存储那么长的霍夫曼表。其实,JPEG的霍夫曼表是由一定规则生成,只要给出少量的描述即可生成相应的JPEG的霍夫曼表。 在baseline的JPEG系统中采用Canonical Huffman Code(范式哈夫曼编码),而在扩展系统中采用算术编码。首先介绍一下DC可变长度代码(VLI)编码,AC系数行程长度编码(RLE),首先要采用Zigzeg扫描,形成
阅读全文
摘要:提起 Huffman 这个名字,程序员们至少会联想到二叉树和二进制编码。的确,我们总以 Huffman 编码来概括 D.A.Huffman 个人对计算机领域特别是数据压缩领域的杰出贡献。我们知道,压缩 = 模型 + 编码,作为一种压缩方法,我们必须全面考虑其模型和编码两个模块的功效;但同时,模型和编码两个模块又相互具有独立性。举例来说,一个使用 Huffman 编码方法的程序,完全可以采用不同的模型来统计字符在信息中出现的概率。因此,我们这一章将首先围绕 Huffman 先生最为重要的贡献 —— Huffman 编码展开讨论,随后,我们再具体介绍可以和 Huffman 联合使用的概率模型。为什
阅读全文
摘要:今天发现在VS 2005环境下使用boost ::bind来定义使用错误就会引起编译器崩溃。错误信息是:项目 : error PRJ0002 : 错误的结果 1 (从“C:/Program Files/Microsoft Visual Studio 8/VC/bin/cl.exe”返回)。当然这个错误信息还有可能是其它原因导致的,这里提到的仅仅是其中的一种。在网上找了些资料,现在总结如下:typedef boost::function<void (bool, int)> Ansyn_net_command;class Listener{public: Listener(){}pub
阅读全文
摘要:作者:Eric Steven Raymond <esr@thyrsus.com>Thyrsus Enterprises Rick Moen <rick@linuxmafia.com> 版权 © 2001 Eric S. Raymond修订历史修订版 3.12004年10月28日esr文档‘Google 是你的朋友!’ 修订版 3.02004年2月2日esr主要增加网页论坛应有的礼节内容 原文:How To Ask Questions The Smart Way翻译:王刚 <yafrk@yahoo.com > 时间:2004年11月2日内容译文 弃权
阅读全文
摘要:2005 CRT memory leaks: std::basic_iostream ( affects std::stringstream, std::fstream, probably others )!!! 这真是件让人郁闷的事情!下面的代码将重现这个错误:1#include<sstream>23intmain()4{5unsignedintx=10000000;6while(x--)7{8std::iostreams(0);9}10}每次泄漏是4Bytes, 结果可想而知!当然,这么重要的错误,MS不可能没有反应。FDBK40119#1: Patch ostream and
阅读全文
摘要:作者:吴尔平转自:http://www.cnblogs.com/WuErPIng/archive/2005/09/21/241407.html 在浅尝boost之timer的post里,我提到boost::timer在linux和windows下的不同表现,并用ACE_OS::gettimeofday做了一个替代方案。不过,为了这个功能把ACE的DLL绑到一起,感觉不是那么愉快。 下面是另一个方案,利用boost::date_time库来解决#include<boost/date_time/posix_time/posix_time.hpp>classElapsedTime{pub
阅读全文
摘要:在使用到deadline_timer时,我需要同时使io_serivice的post函数以及使用timer的async_wait,但是我不清楚async_wait是否准确地在它等待的时刻进行回调。于是我做了一个实验。#include <boost/cstdint.hpp>#include <boost/bind/bind.hpp>#include <boost/asio/io_service.hpp>#include <boost/asio/strand.hpp>#include <boost/asio/deadline_timer.hpp
阅读全文
摘要:转自:http://siteguide.jzxue.com/jianzhanjingyan/200910/08-2877.html我们知道,对于一个大型门户网站来说,可伸缩性是非常重要的,怎么样在纵向和横向有良好的可伸缩性,就需要在做架构设计的时候考虑到一个分的原则,我想在多个方面说一下怎么分:首先是横向的分:1. 大的网站化解为多个小网站:当我们一个网站有多个功能的时候,可以考虑把这个网站拆分成几个小模块,每一个模块可以是一个网站,这样的话我们到时候就可以很灵活地去把这些网站部署到不同的服务器上。2. 静态动态分离:静态文件和动态文件最好分离开成2个网站,我们知道静态网站和动态网站对服务器来
阅读全文
摘要:转自:http://www.vcmy.com/article/2006-4-3/242-1.htm如要对服务器的性能进行优化,首先要了解服务器的用途和影响这类服务器性能的主要因素。一旦因素被确定,就可以有效地解决性能问题。下边讨论通用服务器类型和各类服务器性能的瓶颈。一、domain controller 域控制服务器提供认证服务,实现对网络资源进行管理,包括用户、设备、计算机。维护并实施安全策略,提供一个可靠的网络环境。具有以下的功能:1、用户认证2、资源访问认证3、安全控制例如:LDAP 和 Microsoft’s Active Directory.可能成为Windows 2003域控制器
阅读全文
摘要:转自:http://hi.baidu.com/jrckkyy/blog/item/e86835d61e60722506088b6a.html构造函数构造函数的主要动作就是调用CreateIoCompletionPort创建了一个初始iocp。Dispatch和post的区别Post一定是PostQueuedCompletionStatus并且在GetQueuedCompletionStatus 之后执行。Dispatch会首先检查当前thread是不是io_service.run/runonce/poll/poll_once线程,如果是,则直接运行。poll和run的区别 两者代码几乎一样,都
阅读全文
摘要:打开或新建一个VS2010工程项目View菜单Other windows菜单点击Property Manager弹出Property Manager框里面有Debug|Win32和Release|Win32选项这2个选项可以设置Debug和Release的工程属性设置打开其中一个双击Microsoft.Cpp.Win32.user会弹出Microsoft.Cpp.Win32.user Property Pages页面, 点击左边VC++ Directories,会出现相应得页面可以在Include Directories与Library Directories里面设置全局的头文件和库路径,保存
阅读全文
摘要:// BoostTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#define BOOST_MEM_FN_ENABLE_STDCALL#define BOOST_MEM_FN_ENABLE_FASTCALL#include <boost/cstdint.hpp>#include <boost/bind/bind.hpp>#include <boost/asio/io_service.hpp>#include <boost/asio/strand.hpp>#include <bo
阅读全文
摘要:Email:kruglinski_at_gmail_dot_comBlog:kruglinski.blogchina.com早在两年前我就已经能很熟练的运用完成端口这种技术了,只是一直没有机会将它用在什么项目中,这段时间见到这种技术被过分炒作,过分的神秘化,就想写一篇解释它如何工作的文章.想告诉大家它没有传说中的那么高深难懂!有什么错误的地方还请高人指正.转载请注明出处及作者,谢谢!以一个文件传输服务端为例,在我的机器上它只起两个线程就可以为很多个个客户端同时提供文件下载服务,程序的性能会随机器内CPU个数的增加而线性增长,我尽可能做到使它清晰易懂,虽然程序很小却用到了NT 5的一些新特性,重
阅读全文
摘要:异步IO、APC、IO完成端口、线程池与高性能服务器转载: http://www.vchelp.net/原作者姓名 Fang(fangguicheng@21cn.com) 异步IO、APC、IO完成端口、线程池与高性能服务器之一 异步IO背景:轮询 PIO DMA 中断 早期IO设备的速度与CPU相比,还不是太悬殊。CPU定时轮询一遍IO设备,看看有无处理要求,有则加以处理,完成后返回继续工作。至今,软盘驱动器还保留着这种轮询工作方式。 随着CPU性能的迅速提高,这种效率低下的工作方式浪费了大量的CPU时间。因此,中断工作方式开始成为普遍采用的技术。这种技术使得IO设备在需要得到服务时,能够产
阅读全文
摘要:template<class Item_type, const char xml_root_name[]> class CConfigItemList{ public: CConfigItemList(){ m_xml_root_name = xml_root_name; } private: string m_xml_root_name; }extern const char hostport_root_name[];typedef CConfigItemList<string,hostport_r...
阅读全文
摘要:转载自:http://kenshinf.blog.51cto.com/1088256/252541关于记号粘贴操作符(tokenpasteoperator):##1.简单的说,“##”是一种分隔连接方式,它的作用是先分隔,然后进行强制连接。其中,分隔的作用类似于空格。我们知道在普通的宏定义中,预处理器一般把空格解释成分段标志,对于每一段和前面比较,相同的就被替换。但是这样做的结果是,被替换段之间存在一些空格。如果我们不希望出现这些空格,就可以通过添加一些##来替代空格。另外一些分隔标志是,包括操作符,比如+,-,*,/,[,],…,所以尽管下面的宏定义没有空格,但是依然表达有意义的定义:def
阅读全文
摘要:选项语法: ~0 - 删除任何引号("),扩充 %0 %~f0 - 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件) %~d0 - 仅将 %0 扩充到一个驱动器号 %~p0 - 仅将 %0 扩充到一个路径 %~n0 - 仅将 %0 扩充到一个文件名(“n”是name 文件名) %~x0 - 仅将 %0 扩充到一个文件扩展名 %~s0 - 扩充的路径只含有短名(“s”为Short,短的) %~a0 - 将 %0 扩充到文件的文件属性(“a”为attribute,即属性) %~t0 - 将 %0 扩充到文件的日期/时间(“t”time) %~z0 - 将 %0 扩充到文件
阅读全文