分为两部分:一是值得阅读源码的C/C++开源项目,对于学习编程和增长经验很有帮助;二是C++资源大全,囊括了各类有质量的Library。这篇文章在网络上流传甚广无法指明出处,转载过来只为方便自己随时查看。
======================== Part I ========================
Libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。
下载链接:http://software.schmorp.de/pkg/libev.html
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。
Redis是一个使用C语言写成的,开源的key-value数据库。redis支持的操作和数据类型比Memcached要多,现在主要用于缓存,支持主从同步机制,Redis的学习可以参考《Redis设计与实现》一书。
下载地址:http://redis.io/
Webbench是一个在Linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。
下载链接:https://github.com/LippiOuYang/WebBench
这是由Apache社区维护的C开源库,主要提供操作系统相关的功能(文件系统、进程、线程、用户、IPC)。此外还提供了一些网络相关的功能。
APR原先是Apache Web服务器的一个组成部分,后来独立出来,成为一个单独的开源项目。
Nginx是由俄罗斯软件工程师Igor Sysoev开发的一个高性能的HTTP和反向代理服务器,具备IMAP/POP3和SMTP服务器功能。Nginx最大的特点是对高并发的支持和高效的负载均衡,在高并发的需求场景下,是Apache服务器不错的替代品。目前,包括新浪、腾讯等知名网站已经开始使用Nginx作为Web应用服务器。
主页:http://nginx.org/en/download.html
tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。
下载链接:https://github.com/LippiOuYang/Tinyhttpd
cJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想。
cJSON也存在几个弱点,虽然功能不是非常强大,但cJSON的小身板和速度是最值得赞赏的。其代码被非常好地维护着,结构也简单易懂,可以作为一个非常好的C语言项目进行学习。
项目主页:http://sourceforge.net/projects/cjson/
cmockery是google发布的用于C单元测试的一个轻量级的框架。它很小巧,对其他开源包没有依赖,对被测试代码侵入性小。cmockery的源代码行数不到3K,你阅读一下will_return和mock的源代码就一目了然了。
主要特点:
下载链接:http://code.google.com/p/cmockery/downloads/list
Lua很棒,Lua是巴西人发明的,这些都令我不爽,但是还不至于脸红,最多眼红。
让我脸红的是Lua的源代码,百分之一百的ANSI C,一点都不掺杂。在任何支持ANSI C编译器的平台上都可以轻松编译通过。我试过,真是一点废话都没有。Lua的代码数量足够小,5.1.4仅仅1.5W行,去掉空白行和注释估计能到1W行。
下载地址:http://www.lua.org/
SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。足够小,大致3万行C代码,250K。
UNIX V6 的内核源代码包括设备驱动程序在内 约有1 万行,这个数量的源代码,初学者是能够充分理解的。有一种说法是一个人所能理解的代码量上限为1万行,UNIX V6的内核源代码从数量上看正好在这个范围之内。看到这里,大家是不是也有“如果只有1万行的话没准儿我也能学会”的想法呢?
另一方面,最近的操作系统,例如linux最新版的内核源代码据说超过了1000万行。就算不是初学者,想完全理解全部代码基本上也是不可能的。
下载地址:http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6
NetBSD是一个免费的,具有高度移植性的UNIX-like操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从64bit alpha服务器到手持设备和嵌入式设备。NetBSD计划的口号是:”Of course it runs NetBSD”。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓越的表现,而且它也有受使用者支持的完整的源代码。许多程序都可以很容易地通过NetBSD Packages Collection获得。
LevelDb是谷歌两位大神级别的工程师发起的开源项目,简而言之,LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库。
它是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上。其次,LevleDb在存储数据时,是根据记录的key值有序存储的,就是说相邻的key值在存储文件中是依次顺序存储的,而应用可以自定义key大小比较函数,LevleDb会按照用户定义的比较函数依序存储这些记录。
主页:https://github.com/google/leveldb
它是异步输入输出的核心。名字本身就说明了一切:Asio意即异步输入/输出。该库可以让C++异步地处理数据,且平台独立。异步数据处理就是指,任务触发后不需要等待它们完成。相反,Boost.Asio会在任务完成时触发一个应用。异步任务的主要优点在于,在等待任务完成时不需要阻塞应用程序,可以去执行其它任务。
异步任务的典型例子是网络应用。如果数据被发送出去了,比如发送至Internet,通常需要知道数据是否发送成功。 如果没有一个象Boost.Asio这样的库,就必须对函数的返回值进行求值。但是,这样就要求待至所有数据发送完毕,并得到一个确认或是错误代码。而使用Boost.Asio,这个过程被分为两个单独的步骤:第一步是作为一个异步任务开始数据传输。 一旦传输完成,不论成功或是错误,应用程序都会在第二步中得到关于相应的结果通知。主要的区别在于,应用程序无需阻塞至传输完成,而可以在这段时间里执行其它操作。
主页:http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio.html
SGI STL是STL代码的经典实现版本,虽然很多编译器不直接使用这个版本,但是很多却在此基础之上进行改进的。比如GNU C++的标准库就是在此基础之上改进的。这份代码还有一个好处是有注释,代码书写非常规范,只要花些时间读懂它并非难事。
主页:https://www.sgi.com/tech/stl/download.html
muduo是一个基于Reactor模式的现代C++网络库,它采用非阻塞IO模型,基于事件驱动和回调,原生支持多核多线程,适合编写 Linux 服务端多线程网络应用程序。
主页:https://github.com/chenshuo/muduo
======================== Part II ========================
关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。
标准库
框架
人工智能
异步事件循环
音频
生态学
压缩和归档
并发
容器
--------------------- 本文来自 royt 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/royt/article/details/76796750?utm_source=copy
文章浏览阅读2.2w次。1、iTunes Connect 如何删除未提交状态应用的APP没有上架过的app是不能删除的 2、iTunes Connect 如何删除提交状态应用的APP如果上架了,要先在rights and pricing中的 specific stores中,把所有的区域都去掉(不在任何区域销售),在『APP信息』中就有删除按钮了。_connect如何将没提交的应用删除
文章浏览阅读915次。写这篇水文呢,也是最近在自己在魔改一个主题用作新做的班级网站。发现模版的背景图片以及其他地方的图片显示只能在电脑端看到,而在移动端不能够自适应。顺便也整理出来。首先是图片的居中自适应:需要先给CSS background-repeat 属性赋值no-repeat,使图片不重复只显示一张。然后再定位背景图像位置,给CSS background-position 属性赋值center,设置水平和垂直都..._div背景图片居中自适应
文章浏览阅读545次。理论知识:C++构造函数与析构函数关于函数有两个概念,函数的定义及函数的原型//函数的原型double sqrt(double);//函数的定义double sqrt(double x){ ..........}总结一句话:构造函数就是初始化,析构函数就是释放空间(以上的函数,均需要有函数的原型及定义)目录1关于构造函数(类的初始化)1.1explic..._const std::string&co
文章浏览阅读290次。今天,终于看完了这本书,零零散散的时间加起来总共花了大约5h看完。好了,继续前面的读书笔记(一),来谈谈自己看了这本书之后的一些读书笔记。 从第五章到最后一章,在我之见,看完后体会最深的有以下几点: 其一,在用代码编程时,要遵循PIE原则(意图清楚而表达明确的编程,就叫PIE原则),也就是写代码要让团队其他人看后能看懂; 其二,代码不是写得越多越好,而是让它在看起来优雅与简单的基_高效程序员的45个习惯(二)
文章浏览阅读3.3k次。// 方法一: 常规方式 首先构造一个List,然后使用List.add进行初始化 List<String> list1 = new ArrayList<>(); list1.add("Java"); list1.add("C"); list1.add("C#"); log.info(">>>>>list1.size()>>>>>..._创建并初始化list
文章浏览阅读374次。Fio(Flexible I/O Tester) 是一款由 Jens Axboe 开发的用于测评和压力/硬件验证的自由开源的软件。它支持 19 种不同类型的 I/O 引擎 (sync、mmap、libaio、posixaio、SG v3、splice、null、network、 syslet、guasi、solarisaio,以及更多), I/O 优先级(针对较新的 Linux 内核),I/O 速..._ios=0/0, merge=0/0, ticks=0/0, in_queue=303462, util=0%
文章浏览阅读1.7k次。PB调用C#动态库实现新大陆星POS扫码支付接口。_pb 微信扫码付接口文档
文章浏览阅读481次。---------------------- android培训、java培训、期待与您交流! 听张孝祥老师的课觉得他是一个为人和蔼,知识面丰富,不愧是软件行业的大哥! Eclipse的使用技巧1,MyEclipse 是Eclipse的插件,扩展了功能。 软件运行时:javaw进程运行 2.名词简写:Java EE (Java Platform,E_java怎么加强写好的方法
文章浏览阅读1.5w次,点赞2次,收藏6次。声明本文属于个人所有,转载注明出处:http://blog.csdn.net/hnulwt/article/details/43671687问题描述今天在做android的界面,不过需要用java代码来动态生成一个界面,写起来不算难,但是在控制每行与上行的间隔的时候遇到了问题。在layout xml文件中,通过书写android:layout_marginLeft android:layout_ma_layout_marginstart代码中
文章浏览阅读1.6w次。动态修改定时任务cron参数不需要重启应用就可以动态的改变Cron表达式的值不能使用@Scheduled(cron = "${jobs.cron}")实现_springboot @cron动态传参
文章浏览阅读573次。一、使用Maven的POM引入插件的形式:这种方式只需在POM中引入Tomcat/Jetty的插件即可运行。参考:http://www.cnblogs.com/EasonJim/p/6687272.htmlPOM:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o..._idea配置jetty启动web项目
文章浏览阅读1k次。Web.config文件是一个XML文本文件,它用来储存ASP.NETWeb 应用程序的配置信息(如最常用的设置ASP.NETWeb 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录_webconfig global