
C++
wwwsq
这个作者很懒,什么都没留下…
展开
-
[C++] Linux下的itoa函数
上篇文章说到linux需要itoa函数,下面我就提供一份跨平台的itoa函数。 //return the length of result string. support only 10 radix for easy use and better performanceint my_itoa(int val, char* buf){ const int radix = 1原创 2010-01-05 17:13:00 · 17653 阅读 · 31 评论 -
BoundsChecker下载
首先,单独的BoundsChecker已经没了,被收购了,整合进了DevPartner其次,DevPartner是收费软件,属于Borland的。官方地址:http://www.borland.com/products/devpartner/第三,上面那个borland的地址貌似被GFW屏蔽了,要走代理才能访问。WTF!!第四,DevPartner貌似有破解试用的方法,是一个bat文件清理本机环境原创 2013-08-21 13:00:24 · 13320 阅读 · 0 评论 -
你的sprintf安全吗?
使用snprintf也是不安全的。sprintf、snprintf都无法处理常见的 len += sprintf() 的场景,常常会导致bug。windows下更糟糕,snprintf不保证'\0'结尾。所以,我们需要一个更安全的sprintf。(nginx也意识到了类似的问题,因此在实现ngx_sprintf的时对接口做了类似的调整)声明://return 0 on fail. return r原创 2013-06-08 10:44:30 · 4005 阅读 · 0 评论 -
跨平台的高性能的C++通讯库
想找个C++的跨平台的,高性能的,易于使用的通讯库,在考虑过libevent、boost::aio、libapr、libev、libuv之后,又看到了gnome的gnio为什么这个库这么难找呢,这是由于linux下必须用epoll性能才高,在windows下必须用iocp性能才高。而这两个机制差异太大,不容易整合到一起。退而求其次,只要这个库能支持一万个并发连接的时候性能还过得去就好了。跨平台重要原创 2013-04-27 11:30:29 · 7563 阅读 · 0 评论 -
函数memstr
大家用了memchr、strchr、strstr之后,有没有想要一个叫memstr的函数?从内存里面找特定的字符串?glibc里面没有提供memstr,我这里提供一个吧。验证过的可靠版本://find 'substr' from a fixed-length buffer //('full_data' will be treated as binary data buffer)//retur原创 2013-04-12 10:09:39 · 13353 阅读 · 0 评论 -
LSP入门
LSP是Layered Service Provider的缩写,是介于winsock和应用程序之间的一层。可以让我们实现数据的侦听、拦截和修改。LSP入门的最简单方式是自己编译一个例子运行一下:首先,安装一下windows sdk,win7版的下载页面:http://www.microsoft.com/en-us/download/details.aspx?id=18950 带X的是64位版。然后原创 2013-03-27 16:08:32 · 16022 阅读 · 0 评论 -
NPAPI简介
NPAPI是电脑上大部分非ie浏览器都支持的一种浏览器扩展,类似ie的activex技术。如果你有一个模块需要支持所有浏览器,那么支持activex和npapi之后,基本上就全支持了。npapi是写plugin的,而不是写extension的。它可以用于实现flash插件,但是不能用来实现adblock。npapi的plugin对象是由具体页面来控制生命周期的,类似flash一样,必须页面里面显式原创 2012-12-04 11:41:40 · 16873 阅读 · 1 评论 -
如何编辑ttf字体文件
libfreetype的目标是以最小的内存最快的速度,读取和渲染字体。因此libfreetype并不适宜用来编辑ttf字体文件。编辑字体文件,可以用FontCreator、微软fonttools、fontforge(苹果有个osxfonttools,这里不讨论)FontCreator是个商业软件,没有源代码。带图形界面,没有命令行,网上找不到合适的注册码。微软fonttools是微软内部的一个工具原创 2012-11-21 14:06:12 · 20363 阅读 · 0 评论 -
如何编译libfreetype
libfreetype是为跨平台设计的。在windows下要编译的话,可以直接打开freetype-2.4.10\builds\win32\vc2008目录下的freetype.sln进行编译。有时候我们只希望对特定字体做简单的事情,则我们可以对libfreetype进行裁剪。裁剪的方式有两种:1,对于GNU make需要修改modules.cfg2,对于其他编译器,比如vs2008则需要修改ft原创 2012-11-15 15:15:34 · 4108 阅读 · 0 评论 -
xpcom简介
xpcom可以看作是开源版的Microsoft COM,但是目前应用的范围比较有限,主要是firefox的gecko引擎在使用。xpcom不是浏览器的插件,而是浏览器本身。火狐浏览器就是一堆的xpcom组件构成的。在火狐里面,基本上所有与浏览器相关的功能都被定义成了组件的形式,包括网页间的跳转,窗口管理,cookie 管理,书签,安全,搜索,润色等等的其他功能, 这些功能都是由组件的接口提供的。c原创 2012-11-02 14:54:26 · 2034 阅读 · 0 评论 -
MFC/Win32里面调用qtwebkit
可以用qtwinmigrate原创 2013-10-11 12:21:34 · 3577 阅读 · 3 评论 -
C++的价值
GCC的观点来看,C++最有价值的部分,是析构函数和泛型。从bionic的观点来看,C++的宽字节和异常都是毒药。原创 2013-10-30 16:57:28 · 1832 阅读 · 1 评论 -
[C++] 反编译器
各种开源的decompiler都不太好用,目前最好的反编译器是IDA pro。虽然是收费的,不过破解版很好找。我试过5.5版本的,还不错。我把windows notepad进行了反编译,多少算有点可读性:/* This file has been generated by the Hex-Rays decompiler. Copyright (c) 2009 Hex-Rays De原创 2014-02-09 13:00:21 · 63637 阅读 · 9 评论 -
[C++] 自动关闭右下角弹窗
最近腾讯、迅雷等各种客户端,都越发喜欢在屏幕的右下角弹框了。有骨气的人当然可以把这些软件卸载了事,但是这些客户端在某些情况下却又还是有用的。怎么办呢?原创 2014-10-09 17:36:26 · 3365 阅读 · 1 评论 -
微软的可疑更新DhMachineSvc.exe
这个补丁声称是增强在线支付的安全性。但是这样的工具很容易产生超出预期的用处。原创 2014-07-09 20:44:23 · 32881 阅读 · 2 评论 -
[C++] WinAES的问题
java的aes代码缺省不会设置IV而且采用ECB模式。WinAES需要为此做适配。原创 2014-07-04 11:51:10 · 2489 阅读 · 2 评论 -
[C++] 获取IE代理服务器的账号密码
怎样才可以获取IE里面的代理服务器的账号密码呢?关键在于控制面板->用户->凭证管理器,IE设置的代理服务器账号密码都在这里管理。原创 2014-06-30 13:56:19 · 6744 阅读 · 2 评论 -
[C++] 检查随机内存溢出
C++程序的随机内存溢出是非常难处理的,windows提供了一些工具来缓解这个问题。windows debuger提供的Global Flags可以设置“enable heap tail checking”,设置之后,每块heap内存的尾巴上都会加上check bytes;当free的时候会检查check bytes是否改变,如果改变了就报警。类似的还有几个选项:Enable heap free原创 2014-04-09 14:08:20 · 3354 阅读 · 2 评论 -
C#将可编译为本地机器码
微软宣布了.net native的开发者预览版,详见这里。这是一个大家期待了很多年的特性。每年在技术论坛上都有无数的人问,C#能否编译成本地机器码。有了这个特性之后,更多开发商会开始选择C#来开发客户端。因为检测和安装.net framework实在是非常糟糕的用户体验,很多开发者都避免使用C#。如果.net native能有良好的品质,C++的使用范围大概会缩小不少。很多客户端程序并不是那么在意原创 2014-04-04 10:22:15 · 7413 阅读 · 13 评论 -
推荐C++程序员阅读《CLR via C#》
这本书的作者Jeffrey Richter也是《Windows核心编程》的作者。《Windows核心编程》更多的是对window系统相关知识的挖掘积累。《CLR via C#》则更多的讲解了语言的设计、类库的设计。这本书可以提供几个有益的视角:C++的缺陷是什么,C#是如何规避的,C#为此付出了什么代价参照C#的选择,我们在C++开发中可以做什么C#的易用性是怎么产生的,C++我们可以做什么提高易原创 2014-04-30 13:31:44 · 2589 阅读 · 0 评论 -
[C++] 烦人的error LNK2019和error LNK2001
常见原因:没有正确的设置引用的lib,新手常犯这个错误,这是最容易解决的问题。extern "C"的问题。如果C++写的dll要给C程序用,那么就要注意extern "C"的问题。没有正确的dllexport,用depends.exe或者dumpbin.exe可以检查dll的导出符号表。看看是否正确的导出了符号。UNICODE的区别,比如dll用了unicode进行编译,exe没用unicode,原创 2014-02-18 15:39:51 · 6826 阅读 · 0 评论 -
获取exe和dll里面的资源
有时候需要仿照另一个程序实现一些对话框,比较笨的办法是打开那个程序,照着样子自己在VC里面画啊画。这样的效率实在有点低。现在有很多工具可以从exe和dll里面取出图片、图片、字符串、对话框等资源。比如ResEdit,在指定include目录之后,可以直接把dialog资源反编译成MFC可用的格式,比如://// Dialog resources//LANGUAGE 9, SUBLANG_DE原创 2014-02-12 15:41:41 · 5663 阅读 · 0 评论 -
[C++] 我们需要掌握多少语法细节
最近和人讨论了一些编程中的方法,越发觉得学语法应该不求甚解。语法掌握的越精深,就越有能力阅读和写出晦涩的代码。但是有能力写出晦涩代码,其实是一种缺陷。因为这会无形之中让你不小心写出晦涩的代码,因为你了解那种晦涩的写法,所以你认为写出来也无所谓。但晦涩代码其实是劣质的代码。一种典型的坏代码是:if (a && b && func_do_something());上面的代码看起来简洁而正确,实际上更好原创 2012-10-08 00:13:02 · 1722 阅读 · 1 评论 -
C和lua的互相调用
上代码,码农都喜欢上代码:下面是main.c:#include #include #include #include "lua.h"#include "lualib.h"#include "lauxlib.h"void init_lua(lua_State* L){ luaL_openlibs(L); luaopen_base(L); luaopen_table(L); l原创 2012-08-06 16:15:46 · 10334 阅读 · 1 评论 -
[C++] getaddrinfo的一个bug
程序里面getaddrinfo()有可能会持续的返回 "Temporary failure in name resolution",与此同时ping域名却没问题。通常这是由于getaddrinfo()缓存了/etc/resolv.conf造成的。因此,在修改了/etc/resolv.conf之后,最安全的做法是重启一下服务器。你不能确保机器上的每个程序都正确的处理了getaddrinfo()重新加原创 2012-03-12 15:56:04 · 4722 阅读 · 2 评论 -
[C++] 使用imagemagick的一些问题
只要#include 就可以使用所有功能了。但是你可能会遇到./my_magick.cpp:10: error: 'ThreadResource' was not declared in this scope./my_magick.cpp:10: error: 'SetMagickResourceLimit' was not declared in this scope这是由于Magic++把所原创 2012-02-16 16:59:47 · 3261 阅读 · 5 评论 -
[C++] 在imagemagick里面计算文本的宽度
image.font(font);image.fontPointsize(fontSize);TypeMetric metric;image.fontTypeMetrics(txt, &metric);说明:先在图片对象里面指定字体及字体大小,然后就可以通过fontTypeMetrics()来计算文本的长宽高等信息了。这个函数比较蛋的一点是没有用boundary或者boundaries之类的原创 2012-02-21 16:18:09 · 1938 阅读 · 0 评论 -
[Java] 什么叫做IOC
常听人说起IOC和Spring,那什么是IOC呢?IOC可以理解为‘面向接口编程思想’的一种实现方法,通过IOC实现了强制的‘面向接口编程’。Spring以一种工程化的系统化的方法法,强迫程序员按照架构师的思路去实现class。举例来说,架构师设计了三种业务对象:用户、数据池、数据元。架构师希望这三种对象分别提供各自的接口出来,让用户可以调用数据池,而数据池可以包含数据元。架构师如何让程序员了解他原创 2012-01-06 02:29:28 · 4866 阅读 · 5 评论 -
[C++] 关于gdb断点的真相
gdb的断点是基于信号(signal)实现的在某个地址增加一个断点,实际上就是修改那个地址的代码,把原来的代码替换成INT 3指令,同时让gdb捕获这个signal并做相应的处理:包括执行被替换掉的指令,并跳转回来。因此,只要断点不被走到,那么断点就不会影响程序的运行效率;因为程序的其他地方都没改变,该怎么运行还是怎么运行。gdb在遇到断点之后可以做很多事情包括:停下来等用户处理自动继续自动执行一原创 2011-12-29 11:22:46 · 4338 阅读 · 0 评论 -
[C++] 加速make的编译
make一个超大项目的时候,你有没有过痛不欲生的感觉,make有时候可以长达半个小时。现在是多核的世界,你可以试试make -j 10,有时候可以把编译速度提高五倍。也就是说原本要半个小时的编译,也许五六分钟就编译好了。注意:用make -j 10可能会遇到少数项目出问题。比如在编译openssl的时候,make -j 10就会编译出问题。不过大多数时候这个参数还是很有用的。请仔细测试。测试ok的原创 2011-12-13 13:16:29 · 3042 阅读 · 1 评论 -
[C++] 内存保护
C++有内存保护吗,真的有:http://en.wikipedia.org/wiki/Buffer_overflow_protection这个只能保护stack上的buffer,不过已经很有作用了。写越界写坏callstack的概率低了很多。提醒:如果callstack没有效信息,更有可能是环境版本不匹配。真正写坏callstack这种事情很罕见的。另外,用ldd命令可以看两台机器的环境是否一致,原创 2011-12-13 14:34:06 · 2578 阅读 · 0 评论 -
[C++] gdb高级调试方法
1,启动gdb的时候自动执行脚本gdb -x your_script注意:your_script里面只能有gdb命令。不过我们都知道gdb命令里面有个shell指令,所以实际上这里可以做任何事。2,调试运行中的进程在gdb里面有个attach指令,可以调试运行中的进程。结合上面的-x参数,实际上我们可以写一个脚本,自动的attach到我们关心的进程上面,然后自动的做很多事情:比如设置trace命令原创 2011-12-20 01:41:50 · 7556 阅读 · 3 评论 -
[C++] tcmalloc的尴尬
专用的‘对象池’可以比通用的‘内存池’性能高两个数量级。通过宏定义(DECL_MEM_POOL, IMPL_MEM_POOL)可以很快速的为class增加pool能力,还可以在单线程的环境下去掉锁。真正要性能的程序不会整天去分配内存。性能要求没那么高的程序glibc就够了。所以,tcmalloc是一个很尴尬的东西。ps:tcmalloc据说可以用来优化mysql(让mysql加载tcmalloc来原创 2011-12-16 10:36:12 · 3013 阅读 · 0 评论 -
[C++] 如何静态链接imagemagick
首先,使用最新版的imagemagick,因为较早的版本不能很好的支持static编译方式(据说小于6.5的都可能有问题)。第二,到imagemagick-src目录,执行命令 ./configure --disable-shared --prefix=$(YOUR_IM_PATH)第三,如果你有动态库需要使用这个静态编译的imagemagick,那么还要export CFLAGS="-O3 -W原创 2012-03-14 14:36:30 · 3935 阅读 · 0 评论 -
常见开源项目的代码统计
以下统计只包含了主要模块,比如gcc没有包含gcj等模块,LibreOffice只包含了core模块,等。名字版本主要开发语音代码行数(千行)kernel3.0C13380gcc4.6C5109coreutils8.16C246libevent2.0C68mysql5.5C++1677lighttpd1.4C56memcached1.4C11LibreOffice3.5C++约占90%7100原创 2012-04-10 02:38:54 · 2738 阅读 · 0 评论 -
LibreOffice是用什么语言开发的?
LibreOffice就是以前的OpenOffice,它是用什么语言开发的?主页上介绍说是C++和Java,这两种语言各占多少比例呢?我用工具统计了一下,扩展名为“h,c,hxx,cxx,hpp,cpp”的文件共有代码 7,079,200 行。扩展名为java的文件共有代码 690,005 行。换句话说,java的代码还不到c/c++代码的十分之一。因此,我们可以很确定的说LibreOffice主原创 2012-04-10 01:41:29 · 6743 阅读 · 0 评论 -
哈希表的尴尬
由于cache命中率的原因,哈希表的性能通常是好于红黑树的。即使只有32个元素,红黑树也要进行五次比较,也就是要进行五次随机内存访问。随机内存访问对cpu cache是不太友好的。但是哈希表有哈希表的尴尬,所以还没一统天下。hash表最大的缺陷是当数据的量难以估计的时候,没法设置合适的bucket值。元素可能是10个,也可能是10000个,那么hash表怎么初始化bucket个数。这里有几种思路:原创 2012-07-02 17:40:28 · 2102 阅读 · 0 评论 -
nginx模块开发说明
如何开始写一个模块参见:http://www.evanmiller.org/nginx-modules-guide.html比较特别的有两点:1,需要手工写一个config文件,告诉nginx如何编译你的模块2,需要把你的模块编译进去:./configure --prefix=`pwd`/output --add-module=`pwd`/mymod概述所谓写nginx的module,基本上就是写原创 2012-07-11 12:59:19 · 3853 阅读 · 2 评论 -
[C++] 应该如何应对OOM?
作为一个C/C++程序员,应该怎么应对OOM,尤其是作为一个linux server开发者?很多人喜欢逻辑上‘完美’的解决方案,下面两个是常见的:1,new失败的时候抛异常,外面进行catch和拒绝2,程序判断malloc/new的返回值,为NULL就拒绝请求这两个看似完美的方案都有巨大的缺陷。1,new失败抛异常会导致C++不能正确的释放资源。除非C++程序员精心的设计每个类,并且精心的进行每次原创 2012-05-09 09:58:13 · 3766 阅读 · 0 评论 -
虚函数和函数指针的性能比较
1: load [object_reg + #VFToffset], table_reg2: load [table_reg + #deltaOffset], delta_reg3: load [table_reg + #selectorOffset], method_reg4: add object_reg, delta_reg, object_reg5: call method_reg虚函数的原创 2012-06-18 03:42:06 · 3120 阅读 · 1 评论