29-c/c++/Linux
文章平均质量分 74
edward0004
这个作者很懒,什么都没留下…
展开
-
c/c++高质量编程(林锐)读书笔记二
1.2 头文件的结构头文件由三部分内容组成:(1)头文件开头处的版权和版本声明(参见示例1-1)。(2)预处理块。(3)函数和类结构声明等。假设头文件名称为graphics.h,头文件的结构参见示例1-2。 【规则1-2-1】为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。【规则1-2-2】用 #include 格式来引用标准库的原创 2012-03-15 15:17:51 · 1790 阅读 · 0 评论 -
延迟加载D L L
延迟加载D L L ------Amoon100 2005/10/16 Microsoft Visual C++ 6.0提供了一个出色的新特性,它能够使DLL的操作变得更加容易。这个特性称为延迟加载DLL。延迟加载的DLL是个隐含链接的DLL,它实际上要等到你的代码试图引用DLL中包含的一个符号时才进行加载。延转载 2012-10-10 23:59:14 · 1113 阅读 · 0 评论 -
自旋锁spinlock
spinlock 用于CPU同步, 它的实现是基于CPU锁定数据总线的指令. 当某个CPU锁住数据总线后, 它读一个内存单元(spinlock_t)来判断这个spinlock 是否已经被别的CPU锁住. 如果否, 它写进一个特定值, 表示锁定成功, 然后返回. 如果是, 它会重复以上操作直到成功, 或者spin次数超过一个设定值. 锁定数据总线的指令只能保证一个机器指令内, CPU独占数据总线转载 2012-10-10 23:47:40 · 440 阅读 · 0 评论 -
Windows下Critical Section、Event、Mutex、Semaphores区别
临界区(Critical Section) 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。 临界区包含转载 2012-10-10 23:56:43 · 450 阅读 · 0 评论 -
关于VS的延迟加载dll的使用和理解
延迟加载dll:当一个应用程序过多加载dll的时候,如果都是在启动时加载,那么无疑会减慢程序启动速度,而且会让初始的程序就占用很大内存空间,但并不是所有的dll都是经常使用的,有些可能仅在特殊情况下才会使用到,比如你需要打印功能时,额外的一个dll用于负责此事,但这项功能可能很少人使用,如果程序一启动就加载会有些浪费,谓词微软提供了延迟载入dll的功能,就是当你执行到某个转载 2012-10-11 00:00:02 · 3515 阅读 · 0 评论 -
C语言修饰词之violate
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器)2) 一个中断服务子程序中会访问到的非自动变量(Non-转载 2012-10-14 23:10:50 · 746 阅读 · 0 评论 -
linux内核
Linux 内核主要由5 个模块构成,它们分别是:进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。 进程调度模块用来负责控制进程对CPU 资源的使用。所采取的调度策略是各进程能够公平合理地访问CPU,同时保证内核能及时地执行硬件操作。内存管理模块用于确保所有进程能够安全地共享机器主内存区,同时,内存管理模块还支持虚拟内存管理方式,使得Linux 支持进程使用比实际转载 2012-10-14 23:16:23 · 510 阅读 · 0 评论 -
Linux进程间通信
进程间通信 IPC(InterProcess Communication)基本机制:信号、管道及命名管道、消息队列、共享主存、信号量、套接字。 信号:全称软中断信号,是在软件层次上对中断机制的一种模拟,它也是进程间通信机制中唯一的异步通信机制。Linux信号处理函数可分为信号安装函数、信号发送函数和信号集操作函数。信号安装函数signal(int signum,void(*h转载 2012-10-14 23:10:32 · 1065 阅读 · 0 评论 -
Linux多线程同步机制
一、互斥锁尽管在Posix Thread中同样可以使用IPC的信号量机制来实现互斥锁mutex功能,但显然semphore的功能过于强大了,在Posix Thread中定义了另外一套专门用于线程同步的mutex函数。1. 创建和销毁 有两种方法创建互斥锁,静态方式和动态方式。 POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始转载 2012-10-14 23:12:15 · 559 阅读 · 0 评论 -
求2~2000的所有素数.有足够的内存,要求尽量快
答案:int findvalue[2000]={2};static int find=1;bool adjust(int value){assert(value>=2);if(value==2) return true;for(int i=0;ifind;i++){if(value%findvalue[i]==0)return false;}findvalue[find++];return转载 2012-10-16 00:05:57 · 625 阅读 · 0 评论 -
编程题
三、编程题(第一小题20,第二小题30分)1、 不使用库函数,编写函数int strcmp(char *source, char *dest)相等返回0,不等返回-1;2、 写一函数int fun(char *p)判断一字符串是否为回文,是返回1,不是返回0,出错返回-1bool CircleInList(Link* pHead){if(pHead = = NULL |转载 2012-10-16 00:10:49 · 773 阅读 · 0 评论 -
Pthreads并行编程之spin lock与mutex性能对比分析
POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。Pthreads提供了多种锁机转载 2012-10-10 23:51:00 · 634 阅读 · 0 评论 -
将一个单向链表逆序
/**about: 腾讯面试,将一个单向链表逆序*author:justinzhang*email:uestczhangchao@gmail.com*estblished:2011年4月24日16:40:25*revised:2011年5月10日15:00:26*/#include using namespace std;class node{ public:转载 2012-09-20 13:12:26 · 628 阅读 · 0 评论 -
判断两个单链表是否相交
法1、对链表1中的每个节点p1,判断链表2中是否有一个节点p2指向p1loop:p1从head1到最后一个节点loop:p2从head2到最后一个节点 if(p2是否指向p1) 相交 break时间复杂度:O(list1.length * list2.length)空间复杂度:O(1)法2、使用hash表loop:p1从head1到最后一个节点转载 2012-10-04 21:57:37 · 556 阅读 · 0 评论 -
Gdb常用命令
Gdb命令:调用Gdb编译需要在CC后面加上-g 参数再加-o启动Gdb:#gdb(gdb)I 从第一行开始列出源码(gdb)break n 在第n行处设置断点(gdb)break func 在函数func()的入口处设置断点(gdb)info break 查看断点信息(gdb)run 运行程序(gdb)next 单步执行(gdb)continue 继续运行转载 2012-03-14 22:02:32 · 377 阅读 · 0 评论 -
strcpy函数实现
/********************** * C语言标准库函数strcpy的一种典型的工业级的最简实现 * 返回值: * 返回目标串的地址。 * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。 * 参数: * strDestination * 目标串原创 2012-03-15 21:31:11 · 406 阅读 · 0 评论 -
c/c++高质量编程(林锐)笔记一
【规则6-3-2】在函数体的“出口处”,对return语句的正确性和效率进行检查。 如果函数有返回值,那么函数的“出口处”是return语句。我们不要轻视return语句。如果return语句写得不好,函数要么出错,要么效率低下。7.1内存分配方式内存分配方式有三种:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间原创 2012-03-15 13:30:00 · 1625 阅读 · 0 评论 -
linux如何查看系统信息
拿到一个系统,肯定要看看系统配置,linux下看配置,可没有windows那么直观。你只能一个一个查看。一:cpu[root@srv /]# more /proc/cpuinfo | grep "model name"model name : Intel(R) Xeon(R) CPU X3220 @ 2.40GHzmodel name转载 2012-03-13 19:03:01 · 408 阅读 · 0 评论 -
Sizeof与Strlen的区别与联系
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所转载 2012-03-16 14:12:40 · 351 阅读 · 0 评论 -
编程修养 (作者:陈皓)
编程修养 (作者:陈皓)———— 什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快? 我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对 于速度快,只要编得多也就熟能生巧了。 我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。 2、积极向上的态度,有创造性转载 2012-04-05 21:29:18 · 6031 阅读 · 0 评论 -
c++中const的含义
CONST (一)简单介绍,把握全局 const与define,指针,引用,函数,类成员 1.》》const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内置函数。const和define定义的常量可以放在头文件里面。(转载 2012-04-06 21:28:04 · 583 阅读 · 0 评论 -
友元函数和友元类
用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐转载 2012-10-04 21:16:34 · 458 阅读 · 0 评论 -
关于函数指针和指针函数
我知道函数指针是指向函数的指针,指针函数还是指一个函数的返回值是一个指针,但下面的几道题还是感觉很迷惑。各位能否讲的详细点呢?(1) float(**def)[10] def是什么?(2) double*(*gh)[10] gh是什么?(3) double(*f[10])() f是什么?(4) int*((*b)[10]) b是什么?这样老感觉有点乱,有什么窍门转载 2012-10-04 21:26:58 · 488 阅读 · 0 评论 -
数据声明(Data declarations)
用变量a给出下面的定义a) 一个整型数(An integer) b)一个指向整型数的指针( A pointer to an integer) c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r d)一个有10个整型数的数组( An array of 10 integers) e) 一个有10个指针转载 2012-10-16 09:05:16 · 524 阅读 · 0 评论