随笔分类 - 06. ----- 琐碎思考
摘要:今天在检查home目录时发现有一个名为“\”的文件,觉得很奇怪,从来没见过,就准备用Vim打开看看,很自然地输入命令查看一下,结果居然打不开。ubuntu@ubuntu:~$ vi \> ubuntu@ubuntu:~$ 稍微思考了一下就明白了,不是打不开,问题出在这个文件名“ \ ”上面。 反斜线符号“ \ ”在Bash中被解释为转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值,除了换行符。如果在反斜线之后一个换行字符立即出现,转义字符使行得以继续,遇到命令很长时使用反斜线很有效;反斜线从输入流中被移除并有效地忽略。例一: ubuntu@ubuntu:~$..
阅读全文
摘要:一、类嵌套的疑问C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题。假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的:class B;class A{ public: B b;};class B{ public: A a;};因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的。在这里我们只需要把其中的一个A类中的B类型成员改成指针形式就可以避免这个无限延伸的怪圈了...
阅读全文
摘要:包含目录:#include 中headerfile.h的搜索目录。如果有XXX.h找不到,设置这个目录可以解决。附加依赖项:C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,*.cpp,*.cc,*.c会被打包成一个.lib文件,这样可以保护源代码。所以,要使用一个库,除了要include他的头文件以外,还要在链接过程中把lib加进去。这个就是在附加链接库中设置。其实,一般的库会用#pragma comment(lib,"xxx.lib") 来设置这个过程出错会出现link error,大概是“未定义的函数XXX”。库目录:就是寻找.lib
阅读全文
摘要:stdafx.hVC工程里面经常见到stdafx.h这个头文件,以前也没有特别注意,但是这个文件用不好经常会出错,所以就GOOGLE了一下,总算是弄清楚了。。。stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展)。所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。简介预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文
阅读全文
摘要:来源http://blog.csdn.net/northhero/article/details/4514363我们可以发现,SDK程序中多了一个HWND类型的变量hwnd。该变量用来保存由CreateWindowEx函数创建的窗口句柄,并将其作为参数传递给随后的显示窗口操作(ShowWindow函数)和更新窗口操作(UpdateWindow函数)。而我们自定义的实现代码中,CWnd类定义了一个HWND类型的成员变量:m_hWnd,用于保存这个窗口句柄。首先CWnd类的CreateEx函数创建窗口,并将该窗口句柄保存到这个成员变量,接着调用CWnd类的ShowWindow函数显示窗口时,就不需
阅读全文
摘要:http://blog.csdn.net/yangtalent1206/article/details/5853017 计算机系统有一系列的“周期”概念,区别、联系地理解这些概念至关重要。以下对时钟周期、振荡周期、机器周期、CPU周期、状态周期、指令周期、总线周期、任务周期进行简单介绍。周期 在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。脉冲信号之间的时间间隔称为周期;而将在单位时间(如1秒)内所产生的脉冲个数称为频率。频率是描述周期性循环信号(包括脉冲信号)在单位时间内所出现的脉冲数量多少的计量名称;频率的标准计量单位是Hz(赫)。电脑中的系统时钟就是一个...
阅读全文
摘要:对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级应用。简而言之,回调函数是一个通过函数指针调用的函数。如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数。为什么要使用回调函数呢?我们先看一个小例子: Node * Search_List (Node * node, const int value) { while (node != NULL) { if (node ->...
阅读全文
摘要:在C中,并没有字符串这个数据类型,而是使用字符数组来保存字符串。C字符串实际上就是一个以null('\0')字符结尾的字符数组,null字符表示字符串的结束。需要注意的是:只有以null字符结尾的字符数组才是C字符串,否则只是一般的C字符数组。C字符串定义时可以利用"="号进行初始化,但是以后不能利用"="对C字符串进行赋值。对C字符串的操作需要通过"string"文件中定义的字符串处理函数。例如://字符串的初始化char a[11] = "huanying";//字符串的赋值strcpy(a,&
阅读全文
摘要:1. 并行计算(Parallel Computing) 并行计算或称平行计算是相对于串行计算来说的。并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程。为执行并行计算,计算资源应包括一台配有多处理机(并行处理)的计算机、一个与网络相连的计算机专有编号,或者两者结合使用。并行计算的主要目的是快速解决大型且复杂的计算问题。 并行计算可以划分成时间并行和空间并行。时间并行即流水线技术,空间并行使用多个处理器执行并发计算,当前研究的主要是空间的并行问题。以程序和算法设计人员的角度看,并行计算又可分为数据并行和任务并行。数据并行把大的任务化解成若干个相同的...
阅读全文
摘要:1. 用户态和内核态的概念区别究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子: 1)例子 C代码 1 void testfork() 2 { 3 if(0 == fork()) 4 { 5 6 printf(“create new process success!\n”); 7 8 } 9 10 printf(“testfork ok\n”); 11 12 } 这段代...
阅读全文
摘要:一般来说,透明是允许光穿透的属性。也就是说能看得见,能被知道的。但是计算机中透明的意思其实完全相反,“xx对用户完全透明”是指用户看不到,甚至完全不知道有这东西的存在,这里的透明变成了黑盒子。指客观存在并且运行着但是我们看不到的特性。客观存在的,但对于某些开发人员而言又不需要了解的东西,这就是计算机所指的透明性。简单来说,透明就是黑盒,你只需要应用它给出的接口,而不需要了解内在机理。真是截然不同的两种理解,透明反而什么都看不到了。 记得刚接触到这个词是在学习计算机网络的时候,网络中有“透明传输”这一说法,相信必定有很多初学者和我一样在初遇此词时折腾许久,甚至一直理解的是截然相反的第一种意...
阅读全文
摘要:编写一个程序,以十六进制方式按字节输出一个int类型的每个字节。方法一:使用指针强制转换,将指向int型的指针强制转换成无符号char型,然后通过指针运算输出各个字节。 1 #include<stdio.h> 2 3 int main() 4 { 5 int i = 87654321; 6 7 unsigned char* j = (unsigned char*) &i; 8 9 printf("%X\n",*j);10 printf("%X\n",*(j + 1));11 printf("%X\n",*(j +
阅读全文
摘要:一、工具的使用 1、学会使用vim/emacs,vim/emacs是 Linux下最常用的源码编辑具,不光要学会用它们编辑源码,还要学会用它们进行查找、定位、替换等。新手的话推荐使用vim,这也是我目前使用的文本编辑器。 2、学会makefile文件的编写规则,并结合使用工具aclocal、autoconf和automake生成makefile文件。 3、掌握gcc和gdb的基本用法。掌握gcc的用法对于构建一个软件包很有益处,当软件包包含的文件比较多的时候,你还能用gcc把它手动编译出来,你就会对软件包中各个文件间的依赖关系有一个清晰的了解。 4、掌握svn/cvs的基本用法。这是l...
阅读全文
摘要:ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间。 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。 2
阅读全文
摘要:本文来自褪墨,与大家分享。年底的朋友聚会,大家的话题往往集中在年初制定的梦想计划完成情况。我突然发现,“成功实现梦想的人总是相似的,而不成功的人则各有各的问题”。作为一个疗愈中的“梦想实践重度障碍者”,我深深地感到,尽管今天“梦想”这个词已经快被人谈滥了,我还是非常希望和大家一起探讨关于实践梦想的几个常见障碍,以及可能有效的应对方式。 第一种:“寻梦”障碍有些朋友说,我相信一定有什么事情是我特别想做的,是我一生的梦想和追求,只是我还不知道这件事到底是什么。我自己也有一些兴趣,但看上去都不像“一生的梦想”。于是,关于梦想的实践始终陷在第一步的寻找僵局中,不知何去何从。我曾经就属于这样的一类人,一
阅读全文
摘要:先看看基本区别:i++ :先在i所在的表达式中使用i的当前值,后让i加1++i :让i先加1,然后在i所在的表达式中使用i的新值看一些视频教程里面写for循环的时候都是写 ++i 而不是 i++,上网搜索了一下,原来有效率问题++i相当于下列代码 i += 1; return i; i++相当于下列代码 j = i; i += 1; return j; 当然如果编译器会将这些差别都优化掉,那么效率就都差不多了。
阅读全文
摘要:先看看由VC6自动生成的Hello World程序代码: 1 // hello world.cpp : Defines the entry point for the console application.2 //34 #include "stdafx.h"56 int main(int argc, char* argv[])7 {8 printf("Hello World!\n");9 return 0;10 } 刚学C语言的时候,书上的Hello World程序的main函数也是带参的,当时老师告诉我们:这个你们先别管,以后会懂的。然后就轻轻带过了
阅读全文
摘要:维基百科:写入时复制(Copy-on-write)是一个被使用在程式设计领域的最佳化策略。其基础的观念是,如果有多个呼叫者(callers)同时要求相同资源,他们会共同取得相同的指标指向相同的资源,直到某个呼叫者(caller)尝试修改资源时,系统才会真正复制一个副本(private copy)给该呼叫者,以避免被修改的资源被直接察觉到,这过程对其他的呼叫只都是通透的(transparently)。此作法主要的优点是如果呼叫者并没有修改该资源,就不会有副本(private copy)被建立。第一代Unix系统实现了一种傻瓜式的进程创建:当发出fork()系统调用时,内核原样复制父进程的整个地址
阅读全文
摘要:单指令流多数据流(Single Instruction Multiple Data, SIMD)是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据矢量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。在微处理器中,单指令流多数据流技术则是一个控制器控制多个平行的处理微元,例如Intel的MMX或SSE以及AMD的3D Now!技术。费林分类法(Flynn's Taxonomy),是一种高效能计算机的分类方式。1972年费林(Michael J. Flynn)根据资讯流(information stream)可分成指令(Instruction)和资料(Data)
阅读全文
摘要:1.单内核(执行效率)单内核也叫集中式操作系统。整个系统是一个大模块,可以被分为若干逻辑模块,即处理器管理、存储器管理、设备管理和文件管理,其模块间的交互是通过直接调用其他模块中的函数实现的。单内核模型以提高系统执行效率为设计理念,因为整个系统是一个统一的内核,所以其内部调用效率很高。单内核的缺点也正是由于其源代码是一个整体而造成的,通常各模块之间的界限并不特别清晰,模块间的调用比较随意,所以进行系统修改或升级时,往往“牵一发而动全身”,导致工作量加大,使其难于维护。2.微内核(模块化,可移植性)微内核是指把操作系统结构中的内存管理、设备管理、文件系统等高级服务功能尽可能地从内核中分离出来,变
阅读全文