c/c++
文章平均质量分 90
DamZ
云计算、数据库内核
展开
-
C语言0长度数组(可变数组/柔性数组)详解
原文链接:https://blog.csdn.net/gatieme/article/details/641313221 零长度数组概念————————————————众所周知, GNU/GCC 在标准的 C/C++ 基础上做了有实用性的扩展, 零长度数组(Arrays of Length Zero) 就是其中一个知名的扩展.多数情况下, 其应用在变长数组中, 其定义如下stru...转载 2019-11-22 10:13:29 · 516 阅读 · 0 评论 -
多态的学习、理解、应用
关于虚函数列表,讲得很不错:http://blog.csdn.net/haoel/article/details/1948051/多态实现机制(上)---c++篇http://dustin.iteye.com/blog/362416多态实现机制(下) --java篇http://dustin.iteye.com/blog/362429原创 2012-11-21 00:48:59 · 521 阅读 · 0 评论 -
缓冲通用接口的设计和实现
占位。解决的问题:举个例子,比如电信系统中的用户基本信息、产品信息,系统启动后缓冲到内存中,可以让应用程序快速访问。如果有需要,可以将内存数据保存到文件中去。当需要时,再有选择性的将数据从文件中读取出来!原创 2012-11-16 09:32:10 · 484 阅读 · 0 评论 -
简单实现缓冲写入文件类
快没电了,先贴代码。稍后再写别的,代码写得比较简单,以后再支持其它功能吧!#ifndef __CBUFFER_H__#define __CBUFFER_H__#include #include #include using namespace std;class CBuffer{public: CBuffer(const std::string filename,原创 2013-01-27 21:13:06 · 841 阅读 · 0 评论 -
内存对齐不错的文章
老规矩提供链接吧!http://hi.baidu.com/oxionghuichina/blog/item/f812ad34c2f0a205eac4affd.html转载 2012-08-28 00:32:35 · 667 阅读 · 0 评论 -
动态库
这个问题比较熟悉了,链接下,懒得重新讲述。http://www.cnblogs.com/softfair/archive/2008/09/17/l-dynamic-libraries.html关于加载方式有2个,下面这个文章详细讲了一遍,实际上比较啰嗦。http://blog.csdn.net/dtdn/article/details/307718原创 2012-09-05 14:10:46 · 427 阅读 · 0 评论 -
C++面向对象多线程入门
第1节 背景为了更好的理解多线程的概念,先对进程,线程的概念背景做一下简单介绍。早期的计算机系统都只允许一个程序独占系统资源,一次只能执行一个程序。在大型机年代,计算能力是一种宝贵资源。对于资源拥有方来说,最好的生财之道自然是将同一资源同时租售给尽可能多的用户。最理想的情况是垄断全球计算市场。所以不难理解为何当年IBM预测“全球只要有4台计算机就够了”。这种背景下,一个计算机能转载 2013-01-10 20:07:42 · 4256 阅读 · 1 评论 -
GDB 调试
(gdb)list *0xc33310a0 (查看0xc33310a0地址所在的源代码段,常用来查看报错的位置,但是加入你的地址不曾找到,除了考虑你的地址是 不是在内核空间外,还应考虑是不是编译内核的时候优化程度太大了,适当增大你的内核size)http://www.gnu.org/software/gdb/documentation/ 能查看到很多官方的gdb帮助文件。转载 2012-11-25 20:39:56 · 927 阅读 · 0 评论 -
保障系统出口畅通
这两天我们在做批量业务的时候,当业务量达到10万以上的时候,系统总是会阻塞到pthread_wait_condition。仔细分析了代码,对队列的操作,入队已经加锁,并且判断是否队满,队满的情况下,会等待not full信号;出队也进行了加锁,并且判断是否队空,队空的情况下,会等地not empty信号通知;可是问题是:系统很多子部门都用到了队列操作,就是阻塞那个部分呢?通过inf原创 2013-06-03 10:59:15 · 936 阅读 · 0 评论 -
ArrayList用法
System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。一.优点1。支持自动改变大小的功能2。可以灵活的插入元素3。可以灵活的删除元素二.局限性跟一般的数组比起来,速度上差些三.添加元素1.publicvirtualintAdd(objectvalue);将对象添加到ArrayList的结尾处Ar原创 2008-07-24 23:25:00 · 604 阅读 · 0 评论 -
一个小型项目的目录结构和makefile的设计
说是设计,其实也算是总结吧!大致是想设计出来一个针对小型项目,难度适宜,较为通用的目录结构和makefile。如果你想要自动编译、自动测试、自动集成,不好意思!能力不足,请略过吧!通用目录的设计一般小型的系统都具有以下的目录:myproject/ include/ 公共头文件,放在外面的原因是这部分头文件,具有部分接口的性质 src/ 源代码目录原创 2013-01-13 10:59:26 · 1590 阅读 · 0 评论 -
构建一个简单的数据库系列(七)引入B-tree
英文链接:https://cstack.github.io/db_tutorial/parts/part7.htmlB-Tree是SQLite用来表示表和索引的数据结构,因此它是一个非常重要的想法。为什么树对数据库来讲是非常合适的数据结构呢?搜索特定值很快(时间复杂度:对数) 插入/删除您已经找到的值很快(重新平衡的时间是常量级的) 遍历一系列值很快(与哈希映射不同)...原创 2019-03-25 00:17:53 · 282 阅读 · 0 评论 -
构建一个简单的数据库系列(二)世界上最简单的sql解析器和虚拟机
英文原链接:https://cstack.github.io/db_tutorial/parts/part2.htmlThe “front-end” of sqlite is a SQL compiler that parses a string and outputs an internal representation called bytecode.This bytecode i...原创 2019-03-17 18:23:10 · 328 阅读 · 0 评论 -
值得推荐的C/C++框架和库 【强烈推荐】
值得学习的C语言开源项目Libeventlibev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。下载链接:https://github.com/libeven转载 2016-10-22 21:53:58 · 10301 阅读 · 1 评论 -
fcntl 用法
功能描述:根据文件描述词来操作文件的特性。#include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件)描述符提供控制。参数fd转载 2012-09-10 16:00:52 · 525 阅读 · 0 评论 -
栈区,堆区,全局区,文字常量区,程序代码区 详解
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2012-11-20 20:22:59 · 439 阅读 · 0 评论 -
C语言中getopt()函数的使用方法
说起C语言中getopt()函数的使用方法,相信很多学习C++的朋友并不会陌生。本文将由达内的讲师详细为您介绍关于C语言中getopt()函数的使用方法的相关常识。 在Linux中,用命令行执行可执行文件时可能会涉及到给其加入不同的参数的问题,例如:./a.out -a1234 -b432 -c -d程序会根据读取的参数执行相应的操作,在C语言中,这个功能一般是靠getopt()这个函数,转载 2013-01-11 17:33:59 · 8028 阅读 · 0 评论 -
Valgrind介绍
一、什么是valgrindvalgrind是一款运行在linux下的,用来定位c/c++程序中内存使用方面的错误的工具,包括:内存泄漏、使用未初始化的内存、读/写已释放的内存、读/写内存越界、使用malloc/new/new[]和free/delete/delete[]不匹配,等等。 Valgrind是帮助程序员寻找程序里的bug和改进程序性能的工具转载 2012-11-27 14:07:56 · 7135 阅读 · 0 评论 -
常用线程同步方式详解
常用的方式有:互斥锁、读写锁、条件变量、异步信号。参考:读写锁:http://blog.csdn.net/onlyou930/article/details/6432621http://my.oschina.net/u/158589/blog/64897http://blog.csdn.net/solstice/article/details/5307710#_Toc6原创 2013-02-17 00:03:14 · 772 阅读 · 0 评论 -
GDB 多线程调试命令
设置core环境uname -a 查看机器参数ulimit -a 查看默认参数ulimit -c 1024 设置core文件大小为1024ulimit -c unlimit 设置core文件大小为无限 多线程如果dump,多为段错误,一般都涉及内存非法读写。可以这样处理,使用下面的命令打开系统开关,让其可以在死掉的时候生成core文件。 ulimit -c转载 2013-06-03 10:38:40 · 852 阅读 · 0 评论 -
timer相关
以下代码来源:http://www.pudn.com/downloads165/sourcecode/unix_linux/detail756768.html#ifndef TIMER_MANAGER_H#define TIMER_MANAGER_H#include #include #define SIGMYTIMER (SIGRTMAX)class ITimer;clas转载 2013-05-26 21:20:37 · 1103 阅读 · 0 评论 -
大型项目使用Automake/Autoconf完成编译配置
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修改(Eclipse也是这样)。 这么好的东东当然要拿来用了,但GNU的Autotool系列博大精深,工具数量又多,涉及的语言也多,要是自转载 2013-04-27 22:44:46 · 866 阅读 · 0 评论 -
C++标准库异常类
C++标准库异常类继承层次中的根类为exception,其定义在exception头文件中,它是C++标准库所有函数抛出异常的基类,exception的接口定义如下:namespace std { class exception { public: exception() throw(); //不抛出任何异常转载 2012-12-24 16:27:33 · 13654 阅读 · 1 评论 -
C++中的空类,默认产生哪些类成员函数?
答:class Empty{ public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=( const Empty& ); // 赋值运算符 Empt转载 2012-11-21 15:03:49 · 973 阅读 · 0 评论 -
关于static 和 const
关于static在c中,static 用于信息屏蔽,你希望该文件中的一些函数和变量只能被该文件中的函数使用,那么,你可以在该函数、变量的前面加上static,代表他们只能被当前文件中的函数使用!在c++这种面向对象的语言中,上述功能就没有必要了。-----------------------C/C++通用的函数作用域的static型的变量!其目的,也是为了信息的屏蔽!转载 2012-11-19 16:25:38 · 480 阅读 · 0 评论 -
static_cast与dynamic_cast转换
一 C语言中存在着两种类型转换:隐式转换和显式转换隐式转换:不同数据类型之间赋值和运算,函数调用传递参数……编译器完成char ch;int i = ch;显示转换:在类型前增加 :(Type)变量 对变量进行的转换。用户显式增加char *pc = (char*)pb;void *ps = (void*)pa;二 C++中的类型转换转载 2012-11-19 17:00:15 · 497 阅读 · 0 评论 -
C++文件操作详解(ifstream、ofstream、fstream)
C++ 通过以下几个类支持文件的输入输出:ofstream: 写操作(输出)的文件类 (由ostream引申而来) ifstream: 读操作(输入)的文件类(由istream引申而来) fstream: 可同时读写操作的文件类 (由iostream引申而来) 打开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就转载 2012-11-14 17:41:27 · 570 阅读 · 0 评论 -
C++编程对缓冲区的理解
什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲转载 2012-11-09 16:41:59 · 737 阅读 · 0 评论 -
C/C++内存泄漏及检测
“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这类没有垃圾回收机制的语言时,你很多时间都花在处理如何正确释放内存上。如果程序运行时间足够长,如后台进程运行在服务器上,只要服务器不宕机就一转载 2012-11-09 09:41:14 · 648 阅读 · 0 评论 -
引用与指针
转自:http://www.programbbs.com/ (基本问题,继续转载) 在c++函数中,形式参数用 引用 和用指针都可以起到在被调用函数中改变调用函数的变量的作用。什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void function(int &ref); 没有 特定的规定。。学的 久了,就 会习惯什么时候用转载 2012-09-05 14:39:05 · 409 阅读 · 0 评论 -
c++好的书籍
《Inside The C++ Object Model》《Effective C++》和《More Effective C++》以及《Exceptional C++》《C++面向对象高效编程(C++ Effective Object-Oriented Software Construction)》《面向对象软件构造(Object-Oriented Software Construct原创 2012-12-20 14:39:56 · 839 阅读 · 0 评论 -
socket通用地址类的设计(未完待续)
大纲:一、常见socket地址结构体集合二、设计考虑三、最终的结构总结四、参考文档列表 一、地址集合1.sockaddr通用地址,Linux网络编程的地址结构体一种,其定义如下:struct sockaddr{ unsignedshort sa_family; /* address family */ char sa_data[14]; /* up原创 2012-12-26 12:39:40 · 1041 阅读 · 0 评论 -
自动生成Makefile的详细过程
[本人在红帽主机上,按照步骤弄了一个类似的,操作成功。]由于毕业设计开发的平台是Linux, 为了在Linux进行,Makefile的编写是必不可少的,为偷懒,我想使用autotools来进行Makefile的自动生成,在阅读大量的资料后,在理解的基础之上,做了一个小实验,过程记录得非常详细!我的平台是:HP 6510B NotebookFedora 8 32 位的Autoto转载 2013-02-28 15:22:10 · 822 阅读 · 0 评论 -
网络校验和计算
1. 前言校验和计算是NAT功能和内容修改功能的基本功,这些操作进行后都需要修改数据头中的校验和。2. 16位校验和计算2.1 基本原理 IP/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,采用的都是将数据流视为16位整数流进行重复叠加计算。为了计算检验和,首先把检验和字段置为0。然后,对有效数据范围内中每个16位进行二进制反码求和,结果存在检验和字段转载 2013-01-17 23:26:24 · 6190 阅读 · 0 评论 -
汇编常用的几个命令
库文件操作命令:ar经常用法:ar -t libname.a //显示所有对象文件(.o文件)的列表.例: # ar t libtest.alibtest1.olibtest2.oar -rv libname.a objfile1.o objfile2.o ...objfilen.o //把objfile1.o--objfilen.o打包成一个库文件ar 选项d:从转载 2013-02-01 17:15:43 · 1378 阅读 · 0 评论 -
类与类之间的关系
类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。横向关系较为微妙,按照UML的建议大体上可以分为四种:依赖 (Dependency) 关联 (Association) 聚合 (Aggregation) 组合 (Composition) 它们的强弱关系是转载 2013-01-06 19:46:09 · 707 阅读 · 0 评论 -
简单工厂、工厂方法、抽象工厂之小结与区别
简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解。 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。 工厂方法转载 2013-01-10 19:57:56 · 615 阅读 · 0 评论 -
设计模式六大原则
单一职责原则(Single Responsibility Principle)定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责转载 2013-01-06 15:45:58 · 618 阅读 · 0 评论 -
C++有名的类库介绍
在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比较著名的大型库。一、C++标准库已被实转载 2013-01-06 15:38:33 · 812 阅读 · 0 评论 -
线程池的设计和实现
先占位, 一直想写,这几天把它实现下。。打个提纲:1.使用线程池的场合;2.线程池的原理;3.线程池的设计;4.源代码以及调试;5.实例应用;6.同多进程、直接多线程压测数据分析参考:http://www.oschina.net/code/snippet_126720_6837原创 2012-11-11 22:53:05 · 538 阅读 · 0 评论