自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(22)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 记录VC中对operator delete[]的一种优化

记得在看《深入剖析STL》的时候,里面提到了一种很有趣的优化技术,即trivial deconstructor,从字面上来理解,其意思是不必要的析构函数。意思就是说其析构函数没有特别的工作。比如class A{ char* cp;public: ~A(){ delete cp; }}class B{ char b; ~B(){ //empty }} 其中,明显类B的析构函数就是一个trivi

2010-11-10 17:17:00 994

原创 模板传参的注意事项

<br />一个大原则,模板类和类是完全不同的类型,所以参数必须匹配:<br />template <class T>struct y{ char c;};template <template<class X> class op1, template<class X> class op2>struct compose{ template <int x> struct return_type { static const int va

2010-10-18 11:23:00 664

原创 sizeof在C++模板元编程中的妙用

<br />一个简单的例子:<br />int doit(char *s);int main(int argc, char** argv){ cout<<sizeof(doit("test"))<<endl;} <br />执行后会发生什么?由于没有定义doit函数而发生执行错误?NO,事实上程序会正常的输出sizeof(int)。而下面这个例子:<br /> <br />int doit(char *s);int main(int argc, char** argv){

2010-10-18 10:49:00 936

原创 opensuse11.3在虚拟机中装vm tools遇到What is the location of the directory of C header files that match your running

<br />     网上那么多的论坛讨论都没说清楚。,其实说白了,就是没安装或者没安装正确版本的kernel-devel,kernel-source以及kernel-syms。首先用自己的uname -r看下内核版本号,然后找对应的安装就可以了。<br />    <br /> <br />     Suse用户爽了,直接启动yast,search一下“kernel”,然后选择这三个安装就好。如果你是在虚拟机里,发现要让你塞光碟的话,那是因为你的yast源默认只有安装碟,那你就把虚拟机的光驱设置成open

2010-09-14 12:10:00 996

原创 APUE第十章心得:PTHREAD_MUTEX_RECURSIVE的最大用处以及为何flockfile也是RECURSIVE的。

<br />1。为了不在信号处理程序中出现死锁。<br />     试想,如果锁是PTHREAD_MUTEX_NORMAL的,当函数取得互斥锁之后,解锁之前进入了信号处理函数,而这个函数里也调用了这个函数或者尝试取得同样的互斥锁,那么这时就死锁了,不要说这个函数不是信号可重入有可能破坏数据完整性等,就连基本的运行都不可能。<br /> <br /> <br /> <br />2。 构造新的线程原子操作<br />      假设已经有几个我们不可修改的函数里面用了互斥锁,比如标准IO,而我新的函数要将几个

2010-08-31 10:55:00 1449

原创 关于一点pthread_cond_t条件锁的思考以及实验

APUE上,关于条件锁。其中有这么几条总结:1。使用条件锁前必须先锁住对应的互斥锁。2。条件锁进入阻塞(pthread_cond_wait)时自动解开对应互斥锁,而一旦跳出阻塞立即再次取得互斥锁,而这两个操作都是原子操作。好,现在考虑到这一点,假如有如下函数:void* run(void *s){ pthread_mutex_lock(&mutex); while (i==1) { printf("线程%u进入等待状态/n",pthread_self())

2010-08-10 17:07:00 4378 4

原创 APUE第十章心得:线程安全和可重入的区别

<br />文中提到了:malloc不是可重入的,而据我所知,malloc是线程安全的。说白了,可重入和线程安全都是在调用函数的中途再次调用该函数。既然malloc对其中的静态链表对象做了线程同步,那为何还不可重入了?<br /> <br /> <br />查了一些资料,得到以下解答(来自http://bbs.chinaunix.net/thread-1445354-1-1.html的高手版主converse):<br /> <br />可重入:一个函数可以同时被调用,不会有影响<br />线程安全:一个函

2010-07-23 15:29:00 911

原创 一些关于c++的想法

   1.为何GCC虚表在对象前面。 照理说这样的话,类BASE没有虚函数,而其子类DERIVED有虚函数(也就是有虚表指针在前面),那么DERIVED d;BASE* b = &d; 必然有问题,因为这样的话b指针对着的就是d的虚表指针位置,那么按照按照C++的偏移量访问成员的方式,则肯定要出错,那实际上呢?输出&d和b,可以发现两个的地址不同,也就是说B

2010-05-29 18:34:00 510

原创 三年了,外公,你还好么

今天是19日,明天就是这三年来外公最后一次看到我的日子,有的东西,是会抱憾终身的。 还记得小时候外公送我去游泳时,我说的以后一定要带外公坐飞机去海南玩。可是外公都没能等到我工作。甚至在三年前的三天后,外公离开的最后一刻,已经说不出话的时候,还在指保姆的手机,希望见我最后一面。可是我还是没能赶上。   快要离开这个城市了,走之前,我一定会好好和外公道别。带上外公以前不离身的那串钥匙,到

2010-05-19 16:11:00 467

原创 一些Tips ,持续更新

1. 类类型转换不能多次转换,除非第二次开始的都是标准转换。    何谓标准转换,就是int到double,而不是类A到类B。    假设有类A,A可以被转换为B    A::operator B() const      而B可以转换为int    B::operator int() const    现在有一个函数,原型为:    void fun(int i);

2010-05-12 23:22:00 397

原创 发现一个Chrome在写CSDN博客的时候一个很强的地方

那就是在正文这个Input里面,Firefox3.6,IE8,遨游(IE6),如果按TAB键,全部焦点就跳到下面的输入元素去了,写代码很不爽。  而Chrome,居然是缩进啊!缩进!!!!闻所未闻,咋就能这么强呢???  我百度了下,好像IE,FF都能支持这种功能。最简单的方式是通过监听键盘的keydown事件,来取消浏览器默认事件,并在光标所在处增加"/t/t/t 

2010-05-12 23:06:00 450

原创 纯C++的方式来写函数,函数适配器学习心得

曾经如果要写一个函数,希望这个函数能提供各种操作,比如加法,减法,乘法,除法。那么就得这样写  #define PLUS 1#define MULTIPLE 2#define DEVIDE 3#define MINUS 4double operate(double num1, double num2, int operator){ switch(operator

2010-05-12 22:53:00 788 1

原创 是时候扔掉IE和遨游了,第一次尝试Chrome

不论启动速度还是渲染速度都是一流,而且收藏夹同步功能不错。加了两个插件后有了关闭撤销功能和拖拽新标签页功能,太合适了。我第一次把系统默认浏览器设置为IE以外的浏览器,即使是FF3都没有这种待遇(因为有点慢,说实话,而且拖拽那个插件我选的不怎么好,经常一拖出来两个窗口)。 V8的速度的确没话说。  当然了,网银的时候还是要靠IE和遨游

2010-03-25 12:05:00 786 1

原创 在c和c++中对const修饰符的不同处理

我不会说为什么在c++中用const比define好,因为我自己都没有多好地领悟到,反而还觉得define能够完成更强大的功能,只要使用得当。 在这里要说的只是一个小技巧,给自己备忘用的。  const在C和C++中最大的不同是,在C中,const默认具有外部链接,而C++中则是内部链接,那么用起来有什么不同呢? 假如我定义了const int i = 50; 

2010-02-23 16:30:00 444

原创 APUE第八章学习笔记,wait的隐患于waitpid的必要性

如果不用waitpid而要等到特定子进程结束,一般这么写 pid_t pid;int status;pid_t lastpid;if ((pid = fork())     { //错误处理}if (pid == 0)   {      //子进程工作   }else{     while ( (last_pid = wait(&status))!=

2010-02-03 15:04:00 515

原创 apue第八章心得,原来exec函数是替代了整个代码段和堆栈

#include #include #include #include #include #include int main (int argc, char* argv[]){    char* envi[] = {"1","2","3",NULL};    pid_t child1;    if ((child1 = fork())        printf("error");    el

2010-02-02 00:00:00 616

原创 发现要学的东西好多,快来不及了

学点汇编基础,然后编译原理,然后一些操作系统原理,在把LINUX和C编程搞熟点,研究下APACHE源码,哎,我又那么懒,那么贪玩

2010-01-31 10:45:00 588

原创 LINUX内核中min和max宏的学习

add linux kernel min, max define:include/linux/kernel.h/* * min()/max() macros that also do * strict type-checking.. See the * "unnecessary" pointer comparison. */#define min(x,y) /(__

2010-01-24 22:08:00 1402 2

原创 开始写学习笔记

现在开始记录下学习中的一点一滴,方便以后自省,也是一种自我监督

2010-01-24 22:07:00 570

原创 【入门】用Linux中man命令查询C函数

      大家都知道在Unix/Linux中有个man命令,可以查询常用的命令,函数。可是对于我们这样只知道用"man 函数名"来查询的人来说,会遇到很多问题,比如:      man read,我想看的是ANSI C中stdio的read函数原型和说明,没想到出来的确是BASH命令的说明,这是怎么回事呢?       原来read本身是man命令的一个参数,这样输入man就会以为你

2010-01-10 10:49:00 5525

原创 ORACLE10及以后版本新特性,通过JDBC方便地写入CLOB数据

      大家知道,直接用JDBC写入CLOB就是一个噩梦,一般的情况是要先创建一个空的CLOB,然后读出游标,再修改。而要写入大数据或者调用参数直接就是CLOB的存储过程,这样做是不可能的。而直接通过setChracter或者setAsciiStream也不能写入超过4K以上的数据。      这一切的一切,在ORACLE10以后都得到了改观。 这是ORACLE得官方文档htt

2009-12-03 17:38:00 1941 2

原创 在JDK中使用XSLTC所遇到的"找不到外部方法"的解决方式

 当时遇到这个问题,在CSDN上提问,但是没得到好的解决方案http://topic.csdn.net/u/20091126/17/242fba67-c23b-49b1-ab63-b8b1c0f0864a.html?23516 通过查阅一下两个网页,终于知道了原因以及解决方案http://forums.sun.com/thread.jspa?threadID=5327924ht

2009-11-26 23:18:00 1766 1

Unix环境高级编程(APUE)中文版,PDF格式,unix/linux编程圣经

业界内公认的最权威的著作,对UNIX/LINUX下编程的系统教程,桌案必备书之一

2010-02-10

Unix网络编程第三版第卷一 带源码(TCP/IT,套接字)

经典中的经典,大师的遗作,CHM格式,带源代码

2010-02-10

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除