C/C++
文章平均质量分 70
tianyue168
这个作者很懒,什么都没留下…
展开
-
函数指针和指针函数的基本概念
一、函数指针 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量原创 2009-11-12 19:21:00 · 484 阅读 · 0 评论 -
gcc 的一些命令记录
<br /><br /> <br />把GCC的编译信息重定向到一个文件中<br /> <br />“gcc -c test.c 2> error.txt, Unix下错误输出的ID一般为2”<br /> <br />gcc的编译流程分为四个步骤,分别为:<br />预处理(Pre-Processing)<br />编译(Compiling)<br />汇编(Assembling)<br />链接(Linking)<br /><br /><br />1) 预处理: (-E 只预处理原创 2010-08-10 08:21:00 · 553 阅读 · 0 评论 -
一些概念记录
<br /> <br />1.网络编程中设计并发服务器,使用多进程 与 多线程 ,请问有什么区别?<br />1),进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。<br />2),线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。<br />两者都可以提高程序的并发度,提高程序运行效率和响应时间。<br />线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相原创 2010-08-10 11:47:00 · 668 阅读 · 0 评论 -
VMware虚拟机中安装VMWare-Tools
<br />既然是虚拟机,其硬件设备自然也是虚拟的,用常规方法当然无法正确安装“虚拟”设备的驱动程序。不过VMware提供了一个专门的工具——VMware Tools,来帮助正确地安装、设置虚拟显卡。<br /> <br />1.在启动虚拟机以后,鼠标依次单击VMware主界面上的“设定”选单→“VMware工具安装”选单项,然后在弹出的对话框里单击“Install”即可。<br />此时只是加载了VMware Tools(把VMware Tools光盘插入虚拟机的光驱中),还没有真正把它请进家门。<br原创 2010-08-10 09:52:00 · 502 阅读 · 0 评论 -
僵尸进程
<br />1.僵尸进程概念:<br />僵尸进程(Zombie Process):就是已经结束了的进程,但是没有从进程表中删除。太多了会导致进程表里面条目满了,进而导致系统崩溃,倒是不占用其他系统资源。<br />在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。它需要它的父进程来为它收尸,如果他的父进程没转载 2011-01-05 11:59:00 · 616 阅读 · 0 评论 -
创建进程库函数fork
<br />Unix操作系统提供了库函数fork来创建一个新的进程,本文分析一下fork调用背后发生了什么。<br />例如:<br />int pid = fork();<br />从fork函数返回,父进程(pid !=0)和子进程(pid=0)拥有相同的user-leverl context(包括data,text以及stack)的拷贝。fork函数的调用发生了下列一些列的操作:<br />1,它为新创建的子进程在process table分配了一个slot,并且为子进程分配了一个当前全局唯一的进程i原创 2011-01-05 11:58:00 · 704 阅读 · 0 评论 -
select和poll的用法
select()函数的作用<br /> 系统调用select和poll的后端实现,用这两个系统调用来查询设备是否可读写,或是否处于某种状态。如果poll为空,则驱动设备会被认为即可读又可写,返回值是一个状态掩码<br />如何使用select()函数?<br /> select()函数的接口主要是建立在一种叫'fd_set'类型的基础上。它('fd_set') 是一组文件描述符(fd)的集合。由于fd_set类型的长度在不同平台上不同,因此应该用一组标准的宏定义来处理此类变量:转载 2011-02-18 09:28:00 · 598 阅读 · 0 评论 -
隐蔽的内存泄漏——pthread_create 属性设置不当导致
最近解决了一个隐蔽的内存泄漏问题,我们的进程是HA模式,用户不停的切换,会导致内存不停的增长,切换一次,再切回来内存便增加8M左右。原因就是是pthread_create后的僵死线程没有释放导致的内存持续增长。pthread_create (&thread, NULL原创 2011-09-02 15:36:07 · 8376 阅读 · 1 评论 -
C语言字符串操作函数记录
bcmp(比较内存内容) 相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp表头文件 #include定义函数 int bcmp ( con原创 2011-08-25 14:40:32 · 768 阅读 · 0 评论 -
volatile 等C++中固有的不可移植特性
<br />1. volatile 关键字<br /><br />用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里重新读取它的值,并不要随意针对它作优化。<br /><br />不使用volatile定义的变量,可能因为编译器优化而出现一些问题。<br /><br />例如:<br />volatile int i=10;<br />int j = i;<br />...<br />int k = i;<br /><br /原创 2010-08-05 22:46:00 · 771 阅读 · 0 评论 -
C语言中数组名和指针的区别 及 sizeof用法
#i nclude int main(int argc, char* argv[]) { char str[10]; char *pStr = str; cout 实际情况是:第6行输出10,第7行输出4; 先给出三个结论: (1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组; (2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量; (3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4)原创 2010-08-02 09:50:00 · 5578 阅读 · 10 评论 -
C++ 运算符优先级列表
C++ 运算符优先级列表 Precedence Operator Description Example Associativity 1()[]->.::++--Grouping operatorArray acc转载 2010-03-05 10:02:00 · 394 阅读 · 0 评论 -
内存管理相关知识点 及 malloc 与 free
物理内存和虚拟内存要理解内存在程序中是如何分配的,首先需要理解如何将内存从操作系统分配给程序。计算机上的每一个进程都认为自己可以访问所有的物理内存。显然,由于同时在运行多个程序,所以每个进程不可能拥有全部内存。实际上,这些进程使用的是 虚拟内存。 只是作为一个例子,让我们假定您的程序正在访问地址为 629 的内存。不过,虚拟内存系统不需要将其存储在位置为 629 的 RAM中。实际上,它甚至可以不在 RAM 中 —— 如果物理 RAM 已经满了,它甚至可能原创 2010-07-06 18:06:00 · 693 阅读 · 0 评论 -
C++ STL 学习
<br /> <br />STL的关键实际上是iterator。STL算法作为参数使用iterator,他们指出一个范围,有时是一个范围,有时是两个。STL容器支持iterator,这就是为什么我们说 list<int>::iterator,或 list<char>::iterator, 或 list<string>::iterator.<br /> iterator有很好的定义继承性。它们非常有用。某些iterator仅支持对一个容器只读,某些仅支持写,还有一些仅能向前指,有一些是双原创 2010-07-09 10:53:00 · 387 阅读 · 0 评论 -
GDB调试
一:列文件清单1. List(gdb) list line1,line2二:执行程序要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、[、])在内。如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。(gdb)set args b x(gd转载 2010-07-14 15:54:00 · 536 阅读 · 0 评论 -
海量数据整理
<br />1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?<br />方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。<br />s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。<br />s 遍历文件b,采取和a相同的方式将url分别存储到1000各小转载 2010-07-20 22:57:00 · 532 阅读 · 0 评论 -
Windows 内核对象
<br />1. 何为内核对象<br />每个内核对象是一块内存,由操作系统内核维护的,并只能由操作系统内核直接访问;该内存块是一个数据结构,其成员维护着对象的相关信息。有些成员是内核对象共有的,如引用计数和安全描述符;不同的内核对象拥有自己特有的成员。用户无法直接操作内核对象,Windows提供一系列的函数来操纵这些内核对象,并用句柄来标识内核对象,句柄是与进程相关的。内核对象包括事件对象,文件对象,作业对象,互斥对象,进程对象,线程对象,等待计时器对象等等。<br /><br />2. 引用转载 2010-07-22 08:47:00 · 504 阅读 · 0 评论 -
同步机制 ----临界区、互斥量、信号量、事件
四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。 一 临界区临界区的使用在线程同步中应该算是比较简单原创 2010-05-29 11:57:00 · 1912 阅读 · 0 评论 -
字节对齐详解
一.什么是字节对齐,为什么要对齐?<br /> 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。<br /> 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错转载 2010-07-23 19:33:00 · 435 阅读 · 0 评论 -
libcmtd.lib(crt0.obj) : error LNK2019: 无法解析的外部符号 _main
<br />libcmtd.lib(crt0.obj) : error LNK2019: 无法解析的外部符号 _main ,该符号在函数 _mainCRTStartup 中被引用<br />Release/Mapslicer2003.exe : fatal error LNK1120: 1 个无法解析的外部命令<br /> <br />出现这种问题,需要设置编译器。<br />将 链接器-->System-->子系统-->选择 Window 即可原创 2010-07-28 19:41:00 · 4695 阅读 · 0 评论 -
select, poll和epoll的区别
select, poll和epoll的区别(转载) select()系统调用提供一个机制来实现同步多元I/O:#includesys/time.h>#includesys/types.h>#includeunistd.h>intselect(int n,fd_set *readfds,fd_set *writefds,fd_set转载 2011-03-05 17:00:00 · 631 阅读 · 0 评论