Jump to Navigation

C++

C/C++编程

ARM处理器支持的数据宽度

ARM 处理器支持6种数据类型;

8位有符号和无符号字节。 (char, unsigned char)

16位有符号和无符号半字,它们以2字节的边界对准。(short int, unsigned short int)

32位有符号和无符号字,它们以4字节的边界对准。(int, unsigned int)

ARM指令全是以32bit的字并且必须是字对准的。

Thumb指令是半字而且必以两字节的边界对准的。

#include
#include

Category:

GCC 4.8 发布,提升 C++11 的支持

GCC 4.8 正式版发布!!!该版本包括通用的优化、新语言以及语言规范提升,提升 G++ 对 C++11 的支持,改进新的 ISO C++ 标准库、C++11 的支持,支持更多平台,详情请看发行说明
GCCGNU Compiler CollectionGNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划 的关键部分,亦是自由的 类Unix 及苹果计算机 Mac OS X 操作系统的标准编译器。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。

Category:

C11的内建线程支持

C语言走过30年,依旧在不停发展进步。

语言级内建线程支持是C11语言标准引入的新特性之一。

C11内建线程头文件在c11/threading.h

C11内建线程包括mutex锁的实现,临界资源的应用,

mtx_init

mtx_destroy

mtx_lock

mtx_unlock

tss_create

tss_set

tss_get

thrd_current

C11内建线程与linux pthread的比较

Category:

gcc与clang内置原子操作函数研究

原子操作在实现多线程并发操作时非常重要的功能。

在现有的线程库中,一般通过提供锁的功能实现线程的互斥与同步。

但是锁的粒度比较大,在性能要求非常高的软件中可能会受限制。

原子操作函数则能在最小粒度上实现并发的互斥与同步,很多的无锁数据结构(lock-free data structure)库皆使用这些函数实现的。

不同的编译器提供的原子操作函数不相同,但总结下来,也就几种模式,包括:

*)原子加、减并返回操作结果,或者返回当前值后再加、减

*)原子与、或、异或并返回操作结果,或者返回当前值后再与、或、异或

*) test and set类功能,测试标识并设置相应的值

*) exchange/swap类功能,比较并交换值

*)

目前最新版本的gcc、clang的原子操作实现均符合c++11定义的原子操作6种内存模型:

Category:

使用clang编译完全支持C++11的Qt5

总结,通过这次折腾,

加深了对clang/llvm编译工具链的理解。

了解了些关于gcc与clang的内建原子操作机制与实现。

了解了clang当前3.2版本的一些问题。

了解了clang/llvm后续版本的一些新特性。

Qt5关于C++11的配置编译变量设置机制。

Qt5跨平台配置编译的实现机制。

软件包版本说明:

clang/llvm-3.2

libcxx-3.2

libcxxabi-svn-20130223

qt5.0.1

archlinux/kernel3.8.0/x86_64

参考资料:

Category:

karia2近期一点想法

karia2是一个开源的基于Qt4的命令行下载工具aria2的GUI 跨平台下载管理器项目。
aria2c是一个支持许多协议,支持多线程下载的命令行工具。

aria2c这个项目一直非常活跃,最近有点时间,看了一点源代码,发源其工程提供编译出来一个libaria2c.a的库,然后考虑是否能以嵌入方式与karia2界面整合成一个整体。
经一点测试,发现这种方式确实可以正常调用aria2c的下载功能。
因此对些做一些完善工作,从原来的xmlrpc模式修改为直接调用aria2c核心类的方式实现下载功能,以及其他的控制功能与状态监控功能。
目前已经出来一个可用版本,但还不够完善,需要不断完善。

另外,aria2c又提供了json-rpc和websocket-rpc功能,希望有时间的话,能通过比较好的设计模式,实现其提供的所有通信方式,最终打造一个像样的aria2c界面交互下载软件。

现在的代码在github.com提供一份,会定期的同步到sourceforge.net的svn中。
最新代码地址:
https://github.com/kitech/karia2

Category:

CURL 错误码 中文翻译

这几天用CURL做下载系统,经常会遇到一些问题,很多的错误还是和CURL的option有关。现在把这些错误码贴过来,方便查看一下。

Category:

图片搜索/匹配PHASH实现改进

phash是一个图片特征抽取算法实现,
该算法相对还比较简单,特征值只是一个64位无符号整数。
在使用PHP扩展程序处理的时候,原版本的扩展只返回资源类型的值,
只能实时做对比处理,无法把它存储起来。

通过阅读它的PHP扩展,发现修改一下代码即能把资源转变为整数返回,
添加一个扩展函数,PHP_FUNCTION(phash_toint);
参数为使用phash_imagehash返回的资源类型值,
实现函数为,
PHP_FUNCTION(phash_toint)
{
zval * h1_res = NULL;
int h1_resid = -1;
ulong64 * h1;
zval * h2_res = NULL;
int h2_resid = -1;
ulong64 * h2;

Category:

自己动手制作VC++2012绿色版

绿色版本需求:不需要安装即可使用,干净不带IDE,不带其他语言C#、F#开发工具,不带SqlServer相关开发工具,不带.NET4 SDK,
整个包较原版安装包小,支持编译调试版本的程序,支持x86、x64、以及x86交叉编译x64应用程序。

制作环境:
Windows 7 ultimate x64位 中文版本。
VS2011安装在默认的C:\Program Files (x86)\Microsoft Visual Studio 11.0\目录。
绿化环境在Z:\VC2012\目录。

1. 到MicroSoft官方网站下载 MicroSoft Visual Studio 2012 retail 30天试用版本,安装时选择只安装VC++工具,
包括x64开发包,但不包括IA64开发包。
测试运行无误,准备完毕。这原版VC++2012战用磁盘5.5G左右。

Category:

nginx耗时模块的不阻塞主事件循环的异步处理机制

1) 在模块中生成线程池,把nginx的请求交给线程序池来处理

不过,需要在模块的handler中把r->main->count++,并且返回一个NGX_DONE,

这个值必须+1,否则在handler返回后,连接会被nginx断掉。

2)使用upstream机制,把耗时请求放在backend进程处理,把nginx当一个连接池使用

这种方式稍微复杂,不是单单nginx模块的问题,实际是开发一个独立的fastcgi进程或者其他协议服务进程,

通过upstream访问后端。

线程池模式示例代码:

static ngx_int_t ngx_http_nullimp_handler(ngx_http_request_t *r)
{
r->main->count += 1;
pthread_t pth;
int pcr;
pcr = pthread_create(&pth, NULL, test_thread_proc, (void*)r);

return NGX_OK;
}

Category:

页面

订阅 RSS - C++


Main menu 2

by Dr. Radut