
Linux开发c/c++
文章平均质量分 51
hankwangwang
这个人很懒,什么都没有留下
展开
-
转载--大内高手—序
大内高手—序 我一直认为作为一个在linux下工作的C程序员,若对内存有深刻的认识,不但程序的性能会更高,运行更稳定,编程速度也会更快。反之亦有相反的效果,有时一些内存错误让你摸不着头脑,不但大大降低开发速度,开发出来的软件稳定性也值得怀疑。 为了提高组员的编程水平,去年我制定了一系列的培训计划,并负责主讲部分重要课程,其中基础类课程中,有一堂关于内存的课程。当时的讲稿写得很粗略,转载 2007-04-02 11:33:00 · 1929 阅读 · 0 评论 -
踏入C++中的雷区——C++内存管理详解(III)
6、有了malloc/free为什么还要new/delete? malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译转载 2007-04-03 10:07:00 · 1548 阅读 · 0 评论 -
浅析c/c++中的指针
浅析c/c++中的指针 2005-07-27 文/转载 2007-04-03 10:13:00 · 1385 阅读 · 0 评论 -
转载--大内高手—惯用手法
大内高手—惯用手法 转载时请注明出处:http://blog.youkuaiyun.com/absurd/ 《POSA》中根据模式粒度把模式分为三类:架构模式、设计模式和惯用手法。其中把分层模式、管道过滤器和微内核模式等归为架构模式,把代理模式、命令模式和出版-订阅模式等归为设计模式,而把引用计数等归为惯用手法。这三类模式间的界限比较模糊,在特定的情况,有的设计模式可以作为架构模式来用,有的把转载 2007-04-02 11:46:00 · 1454 阅读 · 0 评论 -
踏入C++中的雷区——C++内存管理详解(I)
踏入C++中的雷区——C++内存管理详解 计算机教学网 2006-04-25 文/转载 2007-04-03 09:55:00 · 1605 阅读 · 0 评论 -
转载--大内高手—内存模型
大内高手—内存模型 了解linux的内存模型,或许不能让你大幅度提高编程能力,但是作为一个基本知识点应该熟悉。坐火车外出旅行时,即时你对沿途的地方一无所知,仍然可以到达目标地。但是你对整个路途都很比较清楚的话,每到一个站都知道自己在哪里,知道当地的风土人情,对比一下所见所想,旅程可能更有趣一些。 类似的,了解linux的内存模型,你知道每块内存,每个变量,在系统中处于什么样的位置。转载 2007-04-02 11:35:00 · 2247 阅读 · 0 评论 -
转载--大内高手—全局内存
大内高手—全局内存 转载时请注明出处:http://blog.youkuaiyun.com/absurd有人可能会说,全局内存就是全局变量嘛,有必要专门一章来介绍吗?这么简单的东西,还能玩出花来?我从来没有深究它,不一样写程序吗?关于全局内存这个主题虽然玩不出花来,但确实有些重要,了解这些知识,对于优化程序的时间和空间很有帮助。因为有好几次这样经历,我才决定花一章篇幅来介绍它。 正如大转载 2007-04-02 11:42:00 · 1661 阅读 · 0 评论 -
转载--大内高手—共享内存与线程局部存储
大内高手—共享内存与线程局部存储 转载时请注明出处:http://blog.youkuaiyun.com/absurd 城里的人想出去,城外的人想进来。这是《围城》里的一句话,它可能比《围城》本身更加有名。我想这句话的前提是,要么住在城里,要么住在城外,二者只能居其一。否则想住在城里就可以住在城里,想住在城外就可以住在城外,你大可以选择单日住在城里,双日住在城外,也就没有心思去想出去还是进来了转载 2007-04-02 11:44:00 · 1556 阅读 · 0 评论 -
转载--大内高手—常见内存错误
大内高手—常见内存错误 转载时请注明出处:http://blog.youkuaiyun.com/absurd 随着诸如代码重构和单元测试等方法引入实践,调试技能渐渐弱化了,甚至有人主张废除调试器。这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天甚至数周时间并非罕见。 而这些难以定位的BUG基本上可以归为两类:内存错误和并发问题。而又以内存错转载 2007-04-02 11:45:00 · 1403 阅读 · 0 评论 -
转载--大内高手--调试手段及原理
大内高手--调试手段及原理 转载时请注明出处:http://blog.youkuaiyun.com/absurd/ 知其然也知其所以然,是我们《大内高手》系列一贯做法,本文亦是如此。这里我不打算讲解如何使用boundschecker、purify、valgrind或者gdb,使用这些工具非常简单,讲解它们只是多此一举。相反,我们要研究一下这些工具的实现原理。 本文将从应用程序、编译器和转载 2007-04-02 11:47:00 · 1646 阅读 · 0 评论 -
踏入C++中的雷区——C++内存管理详解(II)
4、指针参数是如何传递内存的? 如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么? void GetMemory(char *p, int num){ p = (char *)malloc(si转载 2007-04-03 10:02:00 · 1460 阅读 · 0 评论 -
踏入C++中的雷区——C++内存管理详解(IV)
8、malloc/free 的使用要点 函数malloc的原型如下: void * malloc(size_t size); 用malloc申请一块长度为length的整数类型的内存,程序如下: int *p = (int *) m转载 2007-04-03 10:08:00 · 1699 阅读 · 0 评论 -
转载--大内高手—栈/堆
大内高手—栈/堆 转载时请注明出处:http://blog.youkuaiyun.com/absurdl 栈栈作为一种基本数据结构,我并不感到惊讶,用来实现函数调用,这也司空见惯的作法。直到我试图找到另外一种方式实现递归操作时,我才感叹于它的巧妙。要实现递归操作,不用栈不是不可能,而是找不出比它更优雅的方式。 尽管大多数编译器在优化时,会把常用的参数或者局部变量放入寄存转载 2007-04-02 11:37:00 · 1642 阅读 · 0 评论 -
转载--大内高手—内存管理器(一)
大内高手—内存管理器(一) 转载时请注明出处:http://blog.youkuaiyun.com/absurd作为一个C程序员,每天都在和malloc/free/calloc/realloc系列函数打交道。也许和它们混得太熟了,反而忽略了它们的存在,甚至有了三五年的交情,仍然对它们的实现一无所知。相反,一些好奇心未泯的新手,对它们的实现有着浓厚的兴趣。当初正是一个新同事的问题,促使我去研究内存管转载 2007-04-02 11:43:00 · 1630 阅读 · 0 评论 -
使用pthread库进行多线程编程
11 Threads1 Introduction不用介绍了吧…2 Thread Concepts1. Thread由下面部分组成:a. Thread IDb. Stackc. Policyd. Signal maske. Errnof. Thread-Specific Data3 Thread I转载 2007-07-02 15:30:00 · 2613 阅读 · 0 评论 -
线程中的信号处理
概念 pthread_sigmask pthread_kill 和 sigwait7.5.1 概念 按照 POSIX, 异步 (外部) 信号发送到整个进程. 所有线程共享同一个设置, 即通过 sigaction 设置的线程处置方法. 每个线程有自己的信号掩码, 线程库根据该掩码决定将信号发送到哪个线程.转载 2007-07-02 16:44:00 · 1607 阅读 · 0 评论 -
Linux下Socket编程
什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据转载 2007-07-04 11:45:00 · 2210 阅读 · 0 评论 -
修改linux资源限制---ulimit
功能说明:控制shell程序的资源。语 法:ulimit [-aHS][-c ][-d ][-f ][-m ][-n ][-p ][-s ][-t ][-u ][-v ]补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源。参 数: -a 显示目前资源限制的设定。 -c 设定core文件的最大值,单位为区块。 -d 程序数据节区的转载 2007-07-05 14:53:00 · 6020 阅读 · 0 评论 -
unix高手的10个习惯
UNIX 高手的 10 个习惯 克服不良的 UNIX 使用模式转载 2007-04-12 13:04:00 · 1411 阅读 · 0 评论 -
c/c++ extern的用处详解
1 基本解释 extern可以置于变量或者函数前,以标示转载 2007-07-24 11:29:00 · 1819 阅读 · 0 评论 -
linux下多進程服務框架
提示:改編自tinyproxy,向原作者致敬! 在程序的開頭,可以定義以下几個常量: #define MAXSERVICES 128 /* 每一個進程最大服務用戶數,防止錯誤積累 */#define STARTSERVERS 32 /* 初始啟動服務進程數 */#define MAXSPARESERVERS 32 /* 最大空閒服務進程數 */#define MINSPARESERVER转载 2007-07-20 14:04:00 · 1331 阅读 · 0 评论 -
makefile制作
1. 引言 无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系。 但转载 2007-07-20 17:01:00 · 2505 阅读 · 0 评论 -
C++多态中的VPTR
以下文字摘录自>(Bruce Eckel):C++中的关键字virtual告诉编译器对于某个成员函数进行动态绑定,而且自动装载实现动态绑定所必须的所有机制。为了完成这件事,编译器对每个包含虚函数的类创建一个表 (称为VTABLE)。在VTABLE中,编译器旋转特定类的虚函数地址。在每个带有虚函数的类中,编译器“秘密”地置一指针,称为vpointer (缩写为VPTR),指向这个对象的VTA转载 2007-07-20 12:05:00 · 1165 阅读 · 0 评论 -
Linux Deamon编程方法
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd等。 守护进程的编程本身并不复杂,复杂的是各种版本的转载 2007-07-20 14:10:00 · 1263 阅读 · 0 评论 -
linux程序调试之工具篇(一):lsof 快速起步
lsof 快速起步 查看对某个文件的使用情况 查看哪些进程对某个文件进行了调用: $ lsof /etc/passwd 查看对文件系统的使用 /tmp目录被垃圾文件塞满了, 但是, 用ls 又看不到太大文件, 谁干的? $ lsof /tmp 查找打开,但是不能连接的文件 一个进程打开一个文件, 然后将其设为 unlinked 状态,原创 2007-07-20 14:24:00 · 1835 阅读 · 0 评论 -
Unix编程FAQ
Unix编程FAQ v0.10无意中找到一个Unix编程FAQ,更好运的是这已经被翻译成中文版了!虽然比较旧了,但还是很有用。由linuxforum.net提供。感谢他们所做的贡献。 下面贴出章节目录。原文还是在linuxforum.net上,这样应该不算是盗链吧! Table of Contents 关于 原英文版 原始中文版 本中文HTML文档 1. 进程控制 1.1. 创原创 2007-07-26 14:07:00 · 1524 阅读 · 1 评论 -
volatile的用法
转载 2007-07-26 14:52:00 · 2595 阅读 · 0 评论 -
在 C/C++中如何构造通用的对象链表
T. W. Burger (twburger@bigfoot.com), 老板, Thomas Wolfgang Burger Consulting 公司2000 年 9 月 01 日您是否做过这样一个项目,它要求您在内存中保存数目不定的若干不同对象?对于某些情况,二叉树是最佳选择,但在通常情况下,更简单的链表是显而易见的选择。一个简化的问题示例链表的难点在于必须复制链表处理转载 2007-07-27 13:29:00 · 1591 阅读 · 0 评论 -
epoll高性能网络服务
。Q:网络服务器的瓶颈在哪? A:IO效率。 在大家苦苦的为在线人数的增长而导致的系统资源吃紧上的问题正在发愁的时候,Linux 2.6内核中提供的System Epoll为我们提供了一套完美的解决方案。传统的select以及poll的效率会因为在线人数的线形递增而导致呈二次乃至三次方的下降,这些直接导致了网络服务器可以支持的人数有了个比较明显的限制。 自从Linux提供了/dev/epoll转载 2007-04-28 17:03:00 · 1816 阅读 · 0 评论 -
sizeof 操作符及pragma内存对齐
function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365key.com/storeit.as转载 2007-07-31 18:09:00 · 2078 阅读 · 1 评论 -
epoll的优点及epoll学习心得
按照man手册的说法:epoll是为处理大批量句柄而作了改进的poll。要使用epoll只需要这三个系统调用:epoll_create(2), epoll_ctl(2), epoll_wait(2)。支持一个进程打开大数目的socket描述符(FD) select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需转载 2007-04-28 17:24:00 · 2651 阅读 · 0 评论 -
IE浏览器 自定义地址协议的实现
关键字:IE插件,shell接口编程,自定义IE协议,VC2003 ATL 实现COM 浏览QQ空间的时候发现,只要在IE地址中输入象一下这种形式的地址,tencent://Message/?Uin=2转载 2007-05-02 14:08:00 · 8422 阅读 · 0 评论 -
epoll用法说明(源代码)
epoll用到的所有函数都是在头文件sys/epoll.h中声明的,下面简要说明所用到的数据结构和函数:所用到的数据结构typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64;转载 2007-04-28 17:22:00 · 2902 阅读 · 0 评论 -
c语言实现函数可变参数
c语言实现函数可变参数转载 2007-05-05 21:01:00 · 2324 阅读 · 0 评论 -
结构体内存对其规则
“成员对齐有一个重要的条件,即每个成员按自己的方式对齐.其对齐的规则是,每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(这里默认是8字节)中较小的一个对齐.并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节.”转载 2007-05-05 21:27:00 · 1515 阅读 · 0 评论 -
虚函数表放在哪里?
引言:近日优快云的"C/C++语言"版的一个问题引 起了我的注意:"请问虚函数表放在哪里?"。我也曾经思考过这个问题,零零散散也有一定的收获,这次正好趁这个机会把我对这一部分的理解整理一下。 首先值得声明的是,本文的编译环境是VS2002+WinXP。C++标准并没有对虚函数的实现作出任何的说明,甚至都没有提到虚函数的实现需要用虚表来 实现,只不过主流的C++编译器的虚函数机制都是通过虚转载 2007-08-04 08:19:00 · 1581 阅读 · 0 评论 -
透过汇编另眼看世界之类成员函数指针
前言:在优快云论坛经常会看到一些关于类成员函数指针的问题,起初我并不在意,以为成员函数指针和普通的函数指针是一样的,没有什么太多需要讨论的。当 我找来相关书籍查阅了一番以后,突然意识到我以前对成员函数指针的理解太过于幼稚和肤浅了,它即不像我以前认为的那样简单,它也不像我以前认为的那样"默 默无闻"。强烈的求知欲促使我对成员函数进行进一步的学习并有了这篇文章。一。理论篇在进行深入学习和分析之转载 2007-08-04 08:20:00 · 1325 阅读 · 2 评论 -
C++中虚析构函数的作用
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout "Do someth转载 2007-08-04 08:11:00 · 1537 阅读 · 0 评论 -
C++类对象创建过程揭密
介绍初 看到这个题目,你可能会有些疑惑:C++类对象的创建还有什么好说的,不就是调用构造函数么?实际上情况并不是想象中的那么简单,大量的细节被隐藏或者被 忽略了,而这些细节又是解决一些其他问题的关键,所以我们很有必要深入到这块"神秘"的区域,去探索鲜为人知的秘密。 分配空间(Allocation)创建C++类对象的第一步就是为其分配内存空间。对于全局对象,静态对象以及分配在栈区域内的对象,转载 2007-08-04 08:18:00 · 2120 阅读 · 0 评论 -
Memcached分布式内存对象缓存系统(二)
Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析,获得对这个出色的开源软件更深入的了解,并可以根据我们的需要对其进行更进一步的优化。末了将通过对BSM_Memcache扩展的分析,加深对memcached的使用转载 2007-08-09 23:40:00 · 2910 阅读 · 0 评论