随笔分类 -  c&c++语言

关于字符编码,你所需要知道的
摘要:关于字符编码,你所需要知道的字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题。这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助。还是得从ASCII码说起说到字符编码,不得不说ASCII码的简史。计算机一开始发明的时候是用来解决数字计算的问题,后来人们发现,计算机还可以做更多的事,例如文本处理。但由于计算机只识“数”,因此人们必须告诉计算机哪个数字来代表哪个特定字符,例如65代表字母‘A’,66代表字母‘B’,以此类推。但是计算机之间字符-数字的对应关系必须得一致,否则就会造成同一段数字在不同计算机上显示出来的字符不一样。因此美国国家标准协会ANSI制定了 阅读全文
posted @ 2011-06-01 13:13 chingliuyu 阅读(223) 评论(0) 推荐(0)
Thunk 技术的一个改进
摘要:转自:http://www.vckbase.com/document/viewdoc/?id=1817摘要:介绍了 thunk 技术中如何避免直接写机器码。关键字:Thunk 机器码 this指针 Thunk技术,一般认为是在程序中直接构造出可执行代码的技术(在正常情况下,这是编译器的任务)。《深度探索C++对象模型》中对这个词的来源有过考证(在中文版的162页),说thunk是knuth的倒拼字。knuth就是大名鼎鼎的计算机经典名著《The Art of Computer Programming》的作者,该书被程序员们称为“编程圣经”,与牛顿的“自然哲学的数学原理”等一起,被评为“世界历. 阅读全文
posted @ 2011-05-25 21:54 chingliuyu 阅读(208) 评论(0) 推荐(0)
explicit关键字与拷贝构造及赋值
摘要:今天看到公司的代码内有大量的explicit关键字,但是老版的MSDN内例子并不完善,实在是不明白,最终从网上一篇文章内找到了答案:原来explicit是为了防止隐式使用拷贝构造函数的.以下附上从新版MSDN中找到的例子和网上那篇文章:// Copy From MSDNThis keyword is a declaration specifier that can only be applied to in-class constructor declarations. An explicit constructor cannot take part in implicit conversio 阅读全文
posted @ 2011-05-09 20:36 chingliuyu 阅读(424) 评论(0) 推荐(0)
CountDownLatch同步辅助类
摘要:从名字可以看出,CountDownLatch是一个倒数计数的锁,当倒数到0时触发事件,也就是开锁,其他人就可以进入了。在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作。CountDownLatch最重要的方法是countDown()和await(),前者主要是倒数一次,后者是等待倒数到0,如果没有到达0,就只有阻塞等待了。下面的例子简单的说明了CountDownLatch的使用方法,模拟了100米赛跑,10名选手已经准备就绪,只等裁判一声令下。当所有人都到达终点时,比赛结束。Java代码packagecom.eyesmore.co 阅读全文
posted @ 2011-05-09 20:26 chingliuyu 阅读(155) 评论(0) 推荐(0)
进程线程及堆栈关系的总结
摘要:进程线程及堆栈关系的总结突然想到进程的栈和线程的栈,就顺便说一下,线程的栈被自动分配到进程的内存空间中进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:简而言之,一个程序至少有一个进程,一个进程至少有一个线程.线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻 阅读全文
posted @ 2011-05-08 17:23 chingliuyu 阅读(496) 评论(0) 推荐(0)
linux中使用pthread_kill函数测试线程是否存活
摘要:pthread_kill:别被名字吓到,pthread_kill可不是kill,而是向线程发送signal。还记得signal吗,大部分signal的默认动作是终止进程的运行,所以,我们才要用signal()去抓信号并加上处理函数。int pthread_kill(pthread_t thread, int sig);向指定ID的线程发送sig信号,如果线程代码内不做处理,则按照信号默认的行为影响整个进程,也就是说,如果你给一个线程发送了SIGQUIT,但线程却没有实现signal处理函数,则整个进程退出。pthread_kill(threadid, SIGKILL)也一样,杀死整个进程。如果 阅读全文
posted @ 2011-05-05 20:18 chingliuyu 阅读(1309) 评论(0) 推荐(0)
关于#/##在宏定义中的用法
摘要:关于#/##在宏定义中的用法(2011-04-01 11:58)http://blog.chinaunix.net/space.php?uid=20792262&do=blog&id=201691分类:算法与数据结构第1篇在C/C++的宏定义中,#/##存在特殊的作用1. #运算符将一个宏的参数转换为字符串字面量。它仅允许出现在带参数的宏的替换列表中。view plaincopy to clipboardprint?#include<cstdio>#definePRINT_STR(s)printf(#s"=%s/n",s)intmain(){ch 阅读全文
posted @ 2011-04-03 17:12 chingliuyu 阅读(883) 评论(0) 推荐(0)
自适应 sprintf源码
摘要://#include "stdafx.h"#define INCLUDE_STRING#ifdef INCLUDE_STRING #include "string.h"#endif#ifdef KERNEL #define NOFLOAT#endif#define sprintf my_sprintf#define vsprintf my_vsprintf#define atoi my_atoi#define ftoa my_ftoa#define strnlen my_strnlen#define DOUBLE_ZERO double(1E-307)# 阅读全文
posted @ 2010-12-20 11:08 chingliuyu 阅读(1005) 评论(0) 推荐(1)
标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
摘要:(比如static_cast,相当于c里面的转换,dynamic_cast (父子之间转换),const_cast 去掉常量性.)关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast,dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。static_cast用法:static_cast< type-id > 阅读全文
posted @ 2010-12-03 16:28 chingliuyu 阅读(186) 评论(0) 推荐(0)