- 博客(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
1058
原创 模板传参的注意事项
<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
713
原创 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
1000
原创 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
1052
原创 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
1512
原创 关于一点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
4483
原创 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
957
原创 一些关于c++的想法
1.为何GCC虚表在对象前面。 照理说这样的话,类BASE没有虚函数,而其子类DERIVED有虚函数(也就是有虚表指针在前面),那么DERIVED d;BASE* b = &d; 必然有问题,因为这样的话b指针对着的就是d的虚表指针位置,那么按照按照C++的偏移量访问成员的方式,则肯定要出错,那实际上呢?输出&d和b,可以发现两个的地址不同,也就是说B
2010-05-29 18:34:00
546
原创 三年了,外公,你还好么
今天是19日,明天就是这三年来外公最后一次看到我的日子,有的东西,是会抱憾终身的。 还记得小时候外公送我去游泳时,我说的以后一定要带外公坐飞机去海南玩。可是外公都没能等到我工作。甚至在三年前的三天后,外公离开的最后一刻,已经说不出话的时候,还在指保姆的手机,希望见我最后一面。可是我还是没能赶上。 快要离开这个城市了,走之前,我一定会好好和外公道别。带上外公以前不离身的那串钥匙,到
2010-05-19 16:11:00
516
原创 一些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
438
原创 发现一个Chrome在写优快云博客的时候一个很强的地方
那就是在正文这个Input里面,Firefox3.6,IE8,遨游(IE6),如果按TAB键,全部焦点就跳到下面的输入元素去了,写代码很不爽。 而Chrome,居然是缩进啊!缩进!!!!闻所未闻,咋就能这么强呢??? 我百度了下,好像IE,FF都能支持这种功能。最简单的方式是通过监听键盘的keydown事件,来取消浏览器默认事件,并在光标所在处增加"/t/t/t
2010-05-12 23:06:00
497
原创 纯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
841
1
原创 是时候扔掉IE和遨游了,第一次尝试Chrome
不论启动速度还是渲染速度都是一流,而且收藏夹同步功能不错。加了两个插件后有了关闭撤销功能和拖拽新标签页功能,太合适了。我第一次把系统默认浏览器设置为IE以外的浏览器,即使是FF3都没有这种待遇(因为有点慢,说实话,而且拖拽那个插件我选的不怎么好,经常一拖出来两个窗口)。 V8的速度的确没话说。 当然了,网银的时候还是要靠IE和遨游
2010-03-25 12:05:00
839
1
原创 在c和c++中对const修饰符的不同处理
我不会说为什么在c++中用const比define好,因为我自己都没有多好地领悟到,反而还觉得define能够完成更强大的功能,只要使用得当。 在这里要说的只是一个小技巧,给自己备忘用的。 const在C和C++中最大的不同是,在C中,const默认具有外部链接,而C++中则是内部链接,那么用起来有什么不同呢? 假如我定义了const int i = 50;
2010-02-23 16:30:00
487
原创 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
563
原创 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
678
原创 发现要学的东西好多,快来不及了
学点汇编基础,然后编译原理,然后一些操作系统原理,在把LINUX和C编程搞熟点,研究下APACHE源码,哎,我又那么懒,那么贪玩
2010-01-31 10:45:00
635
原创 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
1462
2
原创 【入门】用Linux中man命令查询C函数
大家都知道在Unix/Linux中有个man命令,可以查询常用的命令,函数。可是对于我们这样只知道用"man 函数名"来查询的人来说,会遇到很多问题,比如: man read,我想看的是ANSI C中stdio的read函数原型和说明,没想到出来的确是BASH命令的说明,这是怎么回事呢? 原来read本身是man命令的一个参数,这样输入man就会以为你
2010-01-10 10:49:00
5652
原创 ORACLE10及以后版本新特性,通过JDBC方便地写入CLOB数据
大家知道,直接用JDBC写入CLOB就是一个噩梦,一般的情况是要先创建一个空的CLOB,然后读出游标,再修改。而要写入大数据或者调用参数直接就是CLOB的存储过程,这样做是不可能的。而直接通过setChracter或者setAsciiStream也不能写入超过4K以上的数据。 这一切的一切,在ORACLE10以后都得到了改观。 这是ORACLE得官方文档htt
2009-12-03 17:38:00
1990
2
原创 在JDK中使用XSLTC所遇到的"找不到外部方法"的解决方式
当时遇到这个问题,在优快云上提问,但是没得到好的解决方案http://topic.youkuaiyun.com/u/20091126/17/242fba67-c23b-49b1-ab63-b8b1c0f0864a.html?23516 通过查阅一下两个网页,终于知道了原因以及解决方案http://forums.sun.com/thread.jspa?threadID=5327924ht
2009-11-26 23:18:00
1825
1
TA创建的收藏夹 TA关注的收藏夹
TA关注的人