随笔分类 -  C/C++

摘要:共享的资源有a. 堆 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)b. 全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的c. 静态变量 虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的d. 文件等公用资源 这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。独享的资源有a. 栈 栈是独享的b. 寄存器 这个可能会误解,因为电脑的寄存器是 阅读全文
posted @ 2011-12-05 20:38 Charliee 阅读(354) 评论(0) 推荐(0)
摘要:转自:http://lionwq.spaces.eepw.com.cn/articles/article/item/18555标题:浅析malloc()的几种实现方式2008-03-07 12:46:42上海交通大学计算机科学与工程系 孙高鑫malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。 动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统. 阅读全文
posted @ 2011-10-29 17:31 Charliee 阅读(742) 评论(0) 推荐(0)
摘要:1.最佳淘汰算法(OPT)2.先进先出的算法(FIFO)3.最近最久未使用算法(LRU)#include<stdio.h>#include<stdlib.h>#include<string.h>intmemory[4];//内存,存放页面位置intseq[205];//指令的执行顺序intseq_page[205];//用于OPT算法,存放各条指令所在的页面位置intP[4];//用于FIFO算法,存储装入主存中的页面的页号intk=0;//用于FIFO算法,指示当前调入新页时应淘汰页在页号表中的位置intQ[4];//用于LRU算法,页面淘汰队列intta 阅读全文
posted @ 2011-10-29 16:55 Charliee 阅读(837) 评论(0) 推荐(0)
摘要:1. 函数原型(c++ reference) void * memcpy ( void * destination, const void * source, size_t num );不能解决某些覆盖问题。 char * strcpy ( char * destination, const char * source ); 不能解决某些覆盖问题,根据'\0'表示字符串复制终止。void * memmove ( void * destination, const void * source, size_t num ); 能够解决所有覆盖问题。 void * memset ( v 阅读全文
posted @ 2011-10-29 16:43 Charliee 阅读(303) 评论(0) 推荐(0)
摘要:字符编码简介:ASCII,Unicode,UTF-8,GB23121. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制0 阅读全文
posted @ 2011-10-28 22:44 Charliee 阅读(348) 评论(0) 推荐(0)
摘要:使用select函数可以以非阻塞的方式和多个socket通信。程序只是演示select函数的使用,功能非常简单,即使某个连接关闭以后也不会修改当前连接数,连接数达到最大值后会终止程序。1. 程序使用了一个数组fd_A,通信开始后把需要通信的多个socket描述符都放入此数组。2. 首先生成一个叫sock_fd的socket描述符,用于监听端口。3. 将sock_fd和数组fd_A中不为0的描述符放入select将检查的集合fdsr。4. 处理fdsr中可以接收数据的连接。如果是sock_fd,表明有新连接加入,将新加入连接的socket描述符放置到fd_A。View Code#include& 阅读全文
posted @ 2011-10-28 10:34 Charliee 阅读(344) 评论(0) 推荐(0)
摘要:今天上午的sougou笔试题目:1#include<iostream>2usingnamespacestd;3intmain(void){4shortinput[10]={'A','B','C','D','E'};5unsignedchar*p=(unsignedchar*)&input;6ints=0;7cout<<"sizeof(input)"<<sizeof(input)<<endl;8for(inti=0;i<sizeof(i 阅读全文
posted @ 2011-10-23 22:16 Charliee 阅读(375) 评论(0) 推荐(0)
摘要:#include<stdio.h>#include<string.h>//strlen()的头文件,可以省去intmain(void){chara[1000];inti;intlen=0;for(i=0;i<1000;i++){a[i]=-1-i;}printf("%d",strlen(a));//strlen(a)是从a的首地址开始往后查找,直到找到'\0',因为'\0'是字符串结束的标志,又由于char只占一个字节,a[127]=-128,a[128]=127,...,a[255]=0,printf(&quo 阅读全文
posted @ 2011-10-23 19:58 Charliee 阅读(779) 评论(0) 推荐(0)
摘要:引言:在进行网络通信时是否需要进行字节序转换?相同字节序的平台在进行网络通信时可以不进行字节序转换,但是跨平台进行网络数据通信时必须进行字节序转换。原因如下:网络协议规定接收到得第一个字节是高字节,存放到低地址,所以发送时会首先去低地址取数据的高字节。小端模式的多字节数据在存放时,低地址存放的是低字节,而被发送方网络协议函数发送时会首先去低地址取数据(想要取高字节,真正取得是低字节),接收方网络协议函数接收时会将接收到的第一个字节存放到低地址(想要接收高字节,真正接收的是低字节),所以最后双方都正确的收发了数据。而相同平台进行通信时,如果双方都进行转换最后虽然能够正确收发数据,但是所做的转换是 阅读全文
posted @ 2011-10-18 22:06 Charliee 阅读(235) 评论(0) 推荐(0)
摘要:管道函数#inlcude <unistd.h>int pipe(int fd[2])上图来自unix网络编程卷二,描述了父子进程通过两个管道进行数据通信。一个简单父子进程通信的例程:pipe.h:#include <unistd.h>#include <stdlib.h>#include <stdio.h>void server(int rd,int wr){ char buff[100]; ssize_t n; if((n = read(rd,buff,100)) == 0){ printf("no chars\n"); r 阅读全文
posted @ 2011-10-18 21:56 Charliee 阅读(243) 评论(0) 推荐(0)
摘要:转载自:http://www.cnblogs.com/tactoth/archive/2009/09/27/1574772.html不懂最近口干,不喜多言,代码说话:Call_cdecl_stdcallintr=func(3,4);00411AEE push 400411AF0 push 300411AF2 call func (4111E5h)00411AF7 add esp,800411AFA mov dword ptr [r],eaxintr=func(3,4);00411AEE push 400411AF0 push 300411AF2 call func (4111EAh)00411 阅读全文
posted @ 2011-10-18 20:48 Charliee 阅读(299) 评论(0) 推荐(0)
摘要:Five types of interprocess communication:Shared memory permits processes to communicate by simply reading and writing to a specified memory location.Mapped memory is similar to shared memory, except that it is associated with a file in the filesystem.Pipes permit sequential communication from one pr 阅读全文
posted @ 2011-10-15 19:32 Charliee 阅读(261) 评论(0) 推荐(0)
摘要:内存映射图所用主要函数:shmget(),shmat(),shmctl(),shmdt()shmget:通过文件描述符(一般为绝对路径名)产生Key,创建新的共享内存区(最大4096KB)shmat: 将共享内存区映射到调用进程(A,B进程)的地址空间。shmctl: 设置(IPC_SET),获取(IPC_STAT),删除(IPC_RMID)共享内存区。shmdt():进程删除共享内存区映射的内存段*********************程序相关信息*********************/#include<sys/ipc.h>#include<sys/shm.h> 阅读全文
posted @ 2011-10-15 19:21 Charliee 阅读(258) 评论(0) 推荐(0)
摘要:一、功能 保证一个类仅有一个实例。二、结构图三、优缺点 Singleton模式是做为"全局变量"的替代品出现的。所以它具有全局变量的特点:全局可见、贯穿应用程序的整个生命期,它也具有全局变量不具备的性质:同类型的对象实例只可能有一个。四、实现class Singleton{public: static Singleton* Instance();protected: Singleton() { }private: static Singleton* _instance; Singleton(const Singleton&); Singleton& oper 阅读全文
posted @ 2011-10-11 10:42 Charliee 阅读(125) 评论(0) 推荐(0)
摘要:作用:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。比如,QQ中你的好友上线下,他们的头像亮起,熄灭。以下是参考代码#include <Windows.h>#include <list>using namespace std;class Subject;class Observer {public: virtual ~Observer(); virtual void Update(Subject* theChangedSubject) = 0;protected: Observer();};class Subje 阅读全文
posted @ 2011-10-11 10:40 Charliee 阅读(171) 评论(0) 推荐(0)
摘要:一、功能 将抽象部分与它的实现部分分离,使它们都可以独立地变化。二、结构图三、示例代码namespace DesignPattern_Bridge{ // class Implementor class Implementor { public: virtual void OperationImp() = 0; }; // class ConcreteImplementorA class ConcreteImplementorA : public Implementor { public: virtual void Ope... 阅读全文
posted @ 2011-10-11 10:35 Charliee 阅读(211) 评论(0) 推荐(0)
摘要:C++操作符的优先级操作符及其结合性功能用法LLL::::::全局作用域类作用域名字空间作用域::nameclass::namenamespace::nameLLLLL.->[]()()成员选择成员选择下标函数调用类型构造object.memberpointer->membervariable[expr]name(expr_list)type(expr_list)RRRRR++--typeidtypeid显示强制类型转换后自增操作后自减操作类型ID运行时类型ID类型转换lvalue++lvalue--typeid(type)typeid(expr)cast_name<type 阅读全文
posted @ 2011-10-10 11:27 Charliee 阅读(204) 评论(0) 推荐(0)
摘要:优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员名->成员选择(指针)对象指针->成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式++自增运算符++变量名/变量名++单目运算符--自减运算符--变量名/变量名--单目运算符*取值运算符*指针变量单目运算符&取地址运算符&变量名单目运算符!逻辑非运算符!表达式单目运算符~按位取反运算符~表达式单目运算符sizeof长度运算符sizeof(表达式)3/除表达式/表达式左到右双目运算符*乘表 阅读全文
posted @ 2011-09-19 09:51 Charliee 阅读(208) 评论(0) 推荐(0)
摘要:对C复杂声明的理解,到现在还是不行,这是从K&R 第二版中找到的一个程序, 可以加强理解:dcl.hView Code 1#include<stdio.h>2#include<string.h>3#include<ctype.h>45#defineMAXTOKEN1006#defineBUFSIZE10078enum{NAME,PARENS,BRACKETS};910charbuf[BUFSIZE];11intbufp=0;12intgetch(void);13voidungetch(intc);1415inttokentype;16chartoke 阅读全文
posted @ 2011-09-15 10:14 Charliee 阅读(368) 评论(0) 推荐(0)
摘要:C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码 。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建 议,以进一步加强这方面的清单。添加:http://www.boost.org/1、http://snippets.dzone.com/tag/c/--数以千计的有用的C语言源代码片段2、http://www.hotscripts.com/category/c-cpp/scripts-programs/Hotscripts --提供数以百计的C和C++脚本和 阅读全文
posted @ 2011-08-02 21:45 Charliee 阅读(279) 评论(0) 推荐(0)