随笔分类 - 收藏
此分类的文章均为转载的,如果忘了加原文链接希望谅解,希望能提供原文链接给我,谢谢。
摘要:一、定义函数指针typedefvoid(*F)(int); voidprint1(intx){ cout<<x; }intmain(){ F a; a = print1; (*a)(20); }二、简单类型替换typedefintI; intmain(){ I a; a = 10; //a = "a";//false cout<<a; }三、定义数组类型typedefintA[3]; intmain(){ A b = {3,4,5}; cout<<sizeof(b); }总结问题:typedef int[8] intarr8;//erro
阅读全文
摘要:mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。 下面是一个小例子:class ClxTest{public: void Output() const;};void ClxTest:...
阅读全文
摘要:①一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。(可以理解为每次使用该变量时都要从内存中读取,而不是从寄存器中读取)关于优化:在单任务下,在一个函数体内,如果两次读取变量间语句没有对变量的值进行修改,那么编译器就会进行优化。由于寄存器速度快于RAM,所以一般会减少存取外部RAM。②该变量的适用情况:1)并行设备的硬件寄存器(如:状态寄存器)2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables
阅读全文
摘要:1基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了
阅读全文
摘要:我学习C语言的时候,遇到的一个问题就是EOF。它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。 int c; while ((c = fgetc(fp)) != EOF) { putchar (c); }很自然地,我就以为,每个文件的结尾处,有一个叫做EOF的特殊字符,读取到这个字符,操作系统就认为文件结束了。但是,后来我发现,EOF不是特殊字符,而是一个定义在头文件stdio.h的常量
阅读全文
摘要:我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗? 互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网的原理。 下面就是我的学习笔记。因为这些协议实在太复杂、太庞大,我想整理一个简洁的框架,帮助自己从总体上把握它们。为了保证简单易懂,我做了大量的简化,有些地方并不全面和精确,但是应该能够说清楚
阅读全文
摘要:“为什么SP2800+比CD330快”,网上也有很多网友问“为什么AMD的CPU的主频比INTEL的低,但是游戏性能却比INTEL的强?”,“为什么INTEL的多媒体比AMD强?”,“为什么INTEL的多任务会比AMD的好?” 这些有很大一部分归功与CPU的流水线... 我们先说说流水线,我们用生产汽车的流水线来作比喻,比如说生产一辆汽车需要1小时的时间,如果只有一道工序,那么就要1小时的时间才能生产出一辆汽车。如果分成两道工序,每个工序就要30分钟,那么30分钟就能生产一辆汽车。如果分成四道工序,每个工序就要15分钟,那么每15分钟就能下线一辆汽车,但是生产一辆汽车的时间却没有变化。因...
阅读全文
摘要:第1章 Windows系统的消息机制对诸如PowerBuilder(后文简写为PB)、Visual Basic和Delphi等大多数可视化程序设计语言来讲,程序设计的核心是对象的事件、属性和方法,但对Windows系统本身而言,却是以消息处理为其控制机制。Windows把系统中的对象都作为窗口来对待,每个窗口都有一个用来标识其身份的句柄。Windows通过向窗口发送消息,在开发语言中转化为对象的事件,然后驱动对象,响应用户的动作。在许多面向对象的可视化程序设计语言中,Windows的众多消息已经演变成了对象的属性或方法。本章内容包括Windows系统的消息机制、消息的发送、消息的应用实例等。1
阅读全文
摘要:C++的虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。1.无继承的情况#include<iostream>usingnamespacestd;classBase{public:virtualvoidf(){cout<
阅读全文
摘要:原文:http://blog.jobbole.com/19753/在开发C++程序时,一般在吞吐量、并发、实时性上有较高的要求。设计C++程序时,总结起来可以从如下几点提高效率:● l 并发● l 异步● l 缓存下面将我平常工作中遇到一些问题例举一二,其设计思想无非以上三点。1任务队列1.1 以生产者-消费者模型设计任务队列生产者-消费者模型是人们非常熟悉的模型,比如在某个服务器程序中,当User数据被逻辑模块修改后,就产生一个更新数据库的任务(produce),投递给IO模块任务队列,IO模块从任务队列中取出任务执行sql操作(consume)。设计通用的任务队列,示例代码如下:详细实现可
阅读全文
摘要:共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区。在/proc/sys/kernel/目录下,记录着共享内存的一些限制,如一个共享内存区的最大字节数shmmax,系统范围内最大共享内存区标识符数shmmni等,可以手工对其调整,但不推荐这样做。一、应用共享内存的使用,主要有以下几个API:ftok()、shmget()、shmat()、shmdt()及shmctl()。1)用ftok()函数获得一个ID号.应用说明:在IPC中,我们经常用用key_t的值来创建或者打开信号量,共享内存和消息队列。函数原型:key_t ftok(const char *pathname, int p
阅读全文
摘要:学习PV操作之前,我们首先来了解两个很基础的概念:同步、互斥:同步:其实说同步还不如说”协作“,就是我们的目标只有一个,我们奔着同一个目标去的,都是在大家的努力下共同完成这么一件事情。还是比较容易理解的吧。不见得太难。互斥:借用别人的一句话“千军万马过独木桥”,很通俗的一句话,就把咱们这个概念表达的淋漓尽致,就好比有一个大部队来到独木桥这,但是必须排好队,一个一个来;其实现实生活中,还有一个很好的例子可以说明这个互斥的概念,比如打印机,打印机这个工具就非常好的体现了互斥的概念,打印机一旦被别人占用了,那无乱你有多着急,都只能等着,对吧。其实借用别人的话或者资料或者工具来让咱们的学习更加轻松,为
阅读全文
摘要:众所周知,在服务器系统的开发上,对性能要求是很高的,特别在大批量并发中,服务器系统的性能就体现的尤为重要,常常会有人问:为啥我的CPU消耗那么大,为啥我的事务处理那么慢,执行效率无法提高等等此类的问题。那怎么提高系统的性能呢,联系目前的工作,对此谈谈看法。1、服务器系统架构的不合理。服务器在设计时,必须考虑整个系统架构的高效、稳定,高的可靠性和可用性。这点我深有体会,在最近的一个项目中,由于服务器需要接受大批量小数据的多客户端并发请求,对服务器的业务处理提出了挑战。原先的设计采用的了串行业务处理流程,结果导致服务器大量业务堆积,造成丢包现象异常严重。经过讨论后,为了提高服务器的业务处理能力,采
阅读全文
摘要:什么是生产者消费者模式在工作中,大家可能会碰到这样一种情况:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。在生产者与消费者之间在加个缓冲区,我们形象的称之为仓库,生产者负责往仓库了进商品,而消费者负责从仓库里拿商品,这就构成了生产者消费者模式。结构图如下:生产者消费者模式的优点1、解耦假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法,那 么生产者对于消费者就会产生依赖(也就是耦合)。将来如果消费者的代码发生变化, 可能会影响到生产者。而如果两者都依
阅读全文
摘要:在网络编程中,我们经常会遇到阻塞、非阻塞、同步、异步这两组概念,许多人很容易混淆,现在就给大伙儿说说我对着两组概念的理解。先说说阻塞与非阻塞,这主要和程序等待消息时的状态有关1、阻塞程序会阻塞在某一个函数,而不往下执行,就如挂在那里一样,所有的其他业务也都不执行,为一直等到消息到来才往下执行。2、非阻塞程序不会阻塞在某一个函数,不等待消息到来,立即返回,往下执行。举个例子,TCP协议中的send,系统会为其分配一块发送缓存区,假设现在总的缓存 区的大小为1000.,而缓存区里已经有了500个数据,这时调用send,发送1000个字节数据,这时如果在阻塞模式下,send的会先最多的数据放入缓存,
阅读全文

浙公网安备 33010602011771号