![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
水木米
一个关注互联网乐于学习积极乐观的程序员
展开
-
内存对齐
#include <stdio.h>int main(void) { struct str{ int b; char* a; }; union zval{ int b; str stra; int c; }; ...原创 2020-01-02 16:12:44 · 199 阅读 · 0 评论 -
内存溢出和内存泄漏的区别
1.1内存溢出:(Out Of Memory---OOM)系统已经不能再分配出你所需要的空间,比如你需要100M的空间,系统只剩90M了,这就叫内存溢出例子:一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出。比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出。说白了就是...原创 2019-12-30 21:00:14 · 187 阅读 · 0 评论 -
智能指针
当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝;另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。转载 2014-05-13 11:22:41 · 685 阅读 · 0 评论 -
map hash_map介绍
STL map常用操作简介1。目录map简介map的功能使用map在map中插入元素查找并获取map中的元素从map中删除元素2。map简介map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。3。map的功能转载 2014-04-21 15:55:33 · 567 阅读 · 0 评论 -
海量数据处理与Bit-map详解
第一部分、十五道海量数据处理面试题1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中转载 2014-04-21 16:00:05 · 713 阅读 · 0 评论 -
海量数据处理算法—Bit-Map
1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、 Bit Map的基本思想 我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这转载 2014-04-15 15:43:32 · 612 阅读 · 0 评论 -
Trie树
Trie树也称字典树,因为其效率很高,所以在在字符串查找、前缀匹配等中应用很广泛,其高效率是以空间为代价的。一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息,因此可以降低查询操作的复杂度。 下面以英文单词构建的字典树为例,这棵Trie树中每个结点包括26个孩子结点,因为总共有26个英文字母(假设单词都是小写字母组成)。转载 2014-04-16 12:04:23 · 755 阅读 · 0 评论 -
海量数据处理 Bit-map详解
第一部分、十五道海量数据处理面试题1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中转载 2014-04-16 11:54:27 · 599 阅读 · 0 评论 -
在centos 64下面安装gcc 4.1.2
因为编译的机器装了centos 6.5,上面的gcc比较新是4.7,而外面运行的机器试centos5.6,所以编译的程序放到上面跑了之后就会出现 /lib64/libc.so.6: version `GLIBC_2.8' not found等错误(就是libc的版本太低,不支持2.8,我们可以用命令 strings /lib64/libc.so.6 | grep GLIBC_来看库支持的版本)转载 2014-02-14 16:31:07 · 959 阅读 · 0 评论 -
MPI(Message Passing Interface)
【应该了解的背景知识】1、MPI知识--[比较熟悉]2、VC/Visual Studio知识--[一般了解]3、C++知识--[熟悉] MPI全称消息传递接口,是Message Passing Interface的缩写,MPI是一个库,而不是一门语言。它是一种标准或规范的代表,而不特指某一个对它的具体实现。本次实验过程中,使用的MPI实现是MPICH,MPICH是一种转载 2014-02-13 16:22:43 · 2892 阅读 · 0 评论 -
Mono
Mono是一个由Novell公司(先前是Ximian)主持的项目。该项目的目标是创建一系列符合ECMA标准(Ecma-334和Ecma-335)的.NET工具,包括C#编译器和通用语言架构。与微软的.NET Framework(共通语言运行平台)不同,Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,OS X和Solaris。Mono现由转载 2014-02-11 18:23:34 · 1072 阅读 · 0 评论 -
巴菲特的人生财富课
去电脑城淘碟,老板递过来一张dvd的盘:《巴菲特&盖茨:Go Back to School》。老板说:国内看不到这样的节目。封面上,巴菲特穿着火红色的衬衣,一头银发。他的右手边,是穿着哈佛大学T恤的比尔。 这是一个2005年的特别节目,是沃伦·巴菲特和比尔·盖茨去布拉斯加大学林肯分校工商管理学院的一次和学生的交流会。巴菲特在这所学校里,曾获得了自己的学士学位。 节目的形式是:由学生转载 2014-01-13 15:23:11 · 958 阅读 · 0 评论 -
C++内存管理
内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C转载 2014-01-10 18:47:51 · 753 阅读 · 0 评论 -
Linux共享内存
Linux系统编程我一直看 ,只是讲的太简单了,通常是书和网络上的资料结合着来掌握才比较全面 .在掌握了书上的内容后,再来都其他资料 .原文链接 http://www.cnblogs.com/skyme/archive/2011/01/04/1925404.html共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区。在/proc/sys/kernel/目录下,记录着共享转载 2014-01-10 17:07:24 · 857 阅读 · 0 评论 -
C++链表使用完整代码
/* 练习使用链表:创建链表、遍历链表、查找节点、添加节点、删除节点*/#include "stdio.h"#include "string.h"#include "assert.h"#include "stdlib.h"#include "windows.h"#define COUNT 3//定义一个节点结构体struct NODE{转载 2013-12-13 12:19:15 · 798 阅读 · 0 评论 -
[C++]关于i++和++i的学习
[C++]关于i++和++i的学习MoaKap今天在论坛上无意中看到有人问关于i++和++i的问题,感觉自己也不怎么熟悉,就仔细看了一下。感觉有位大侠的回复相当不错,很有特色,把问题讲得很明白,受教了。这里摘录一下,学习学习!-----------------------------------------------------------------------转载 2013-12-09 18:55:49 · 700 阅读 · 0 评论 -
mmap
mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。目 录1函数2条件3参数说明4返回说明5设备操作6集成环境7系统调用8范例8.1 代码示例8.2 代码解释8.3 结论9其他10扩展名转载 2013-11-14 20:04:23 · 1139 阅读 · 0 评论 -
hash_map
hash_map 2010-10-15 17:50:56| 分类: 编程技术|举报|字号 订阅[摘要] 哈希表是一种高效的数据结构。本文分五个部分:首先提出了哈希表的优点,其次介绍了它的基础操作,接着从简单的例子中作了效率对比,指出其适用范围以及特点,然后通过例子说明了如何在题目中运用哈希表以及需要注意的问题,最后总结全文。[正文转载 2014-04-21 15:56:44 · 782 阅读 · 0 评论 -
hash_map 与map介绍
[摘要] 哈希表是一种高效的数据结构。本文分五个部分:首先提出了哈希表的优点,其次介绍了它的基础操作,接着从简单的例子中作了效率对比,指出其适用范围以及特点,然后通过例子说明了如何在题目中运用哈希表以及需要注意的问题,最后总结全文。[正文]1. 引言 哈希表(Hash Table)的应用近两年才在NOI中出现,作为一种高效的数据结构,它正在竞赛中发挥着越来越重转载 2014-04-21 15:50:08 · 829 阅读 · 0 评论 -
递归算法学习系列之经典背包问题
1.引子 我们人类是一种贪婪的动物,如果给您一个容量一定的背包和一些大小不一的物品,裝到背包里面的物品就归您,遇到这种好事大家一定不会错过,用力塞不一定是最好的办法,用脑子才行,下面就教您如何解决这样的问题,以获得更多的奖品。2.应用场景 在一个物品向量中找到一个子集满足条件如下 : 1)这个子集加起来的体积大小不能大于指定阀值 2) 这个物转载 2016-03-31 16:06:40 · 2707 阅读 · 0 评论 -
背包问题算法
0/1背包问题 1. 问题描述 给定一个载重量为m,n个物品,其重量为wi,价值为vi,1背包,并使包内物品价值最大转载 2016-03-31 14:32:16 · 3421 阅读 · 0 评论 -
B-树和B+树的应用:数据搜索和数据库索引
B-树1 .B-树定义B-树是一种平衡的多路查找树,它在文件系统中很有用。定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树;⑵若根结点不是叶子结点,则至少有两棵子树;⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树;⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,A1,K2,…,Kn,转载 2014-09-17 17:12:34 · 797 阅读 · 0 评论 -
TCP time_wait 清晰解释
近来网站随着访问量的增加,服务器的压力也随之上升,一个很明显的状况便是服务端产生了大量的TIME_WAIT状态,它究竟是什么、对系统有何影响、为什么很多人对它如此敏感? Google一下TIME_WAIT会有成千上万的文章,但总是别人的,今天自己整理一下对TIME_WAIT的认识。 TCP连接的终止 TCP建立一个连接至少需要交换三个分组,也因此称之为TCP的三路握手(thre转载 2014-09-26 13:48:07 · 781 阅读 · 0 评论 -
B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关转载 2014-09-16 11:01:22 · 712 阅读 · 0 评论 -
Linux中TCP连接过程状态简介
一、Linux服务器上11种网络连接状态: 图:TCP的状态机通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数据传送; 3、TCP四次挥手注:以下说明最好能结合”图:TCP的状态机”来理解。SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效转载 2014-09-09 20:14:29 · 745 阅读 · 0 评论 -
海量数据面试题
1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1: 可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样转载 2014-09-09 20:11:31 · 610 阅读 · 0 评论 -
socket编程原理
socket编程原理1、问题的引入1) 普通的I/O操作过程:UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行转载 2014-09-09 20:06:39 · 789 阅读 · 0 评论 -
揭开Socket编程的面纱
1. 什么是TCP/IP、UDP?2. Socket在哪里呢?3. Socket是什么呢?4. 你会使用它们吗?什么是TCP/IP、UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协转载 2014-09-09 15:36:52 · 603 阅读 · 0 评论 -
socket、poll、epoll的区别
1. 支持一个进程打开大数目的socket描述符(FD) select最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降; 二是可以选择多进程的解决方案(传统的Apache方案),不转载 2014-09-09 12:10:09 · 787 阅读 · 0 评论 -
GDB的使用方法
一、GDB的静态调试启动方法: 1、当需要在命令行通过gdb来启动可执行程序的时候,可使用一下命令: gdb 这个时候gdb会加载可执行程序的符号表和堆栈,并为启动程序作好准备; 接下来,需要设置可执行程序的命令行参数: set args 然后设置断点: b或break; 最后通过命令r或run来启动程序,或者通过c或co转载 2014-06-19 18:58:59 · 702 阅读 · 0 评论 -
gdb break 断点设置
二、断点设置gdb断点分类:以设置断点的命令分类:breakpoint可以根据行号、函数、条件生成断点。watchpoint监测变量或者表达式的值发生变化时产生断点。catchpoint监测信号的产生。例如c++的throw,或者加载库的时候。gdb中的变量从1开始标号,不同的断点采用变量标号同一管理,可以 用enable、d转载 2014-06-18 16:22:19 · 1681 阅读 · 0 评论 -
用GDB调试程序
用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:转载 2014-05-29 19:18:39 · 662 阅读 · 0 评论 -
nm 命令
用途显示关于对象文件、可执行文件以及对象文件库里的符号信息。语法nm [ -A ] [ -C ] [ -X {32|64|32_64}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ] [ -v ] [ -B | -P ] [ -e | -g | -u ] [ -d | -o | -转载 2014-05-21 10:52:59 · 846 阅读 · 0 评论 -
read 函数和 write 函数
read 函数和 write 函数最近开始从事搜索引擎的工作,所以又重新开始了c/c++的旅程,时隔4年不得不复习一下c/c++其中的内容,以下内容有网上别的朋友发表的,也有我自己总结的.1. read #include ssize_t read(int filedes, void *buf, size_t nbytes);转载 2013-11-14 20:02:38 · 1713 阅读 · 0 评论 -
lseek
lseek编辑目 录1简介2程序例3Linux C3.1 相关函数3.2 表头文件3.3 定义函数3.4 函数说明3.5 参数3.6 返回值3.7 附加说明1简介函数名: lseek功 能: 移动文件读/写指针头文件:#include #include 用 法: off_t lseek(int han转载 2013-11-14 19:59:16 · 973 阅读 · 0 评论 -
什么是阻塞式和非阻塞io流?
Java中的阻塞和非阻塞IO包各自的优劣思考 NIO 设计背后的基石:反应器模式,用于事件多路分离和分派的体系结构模式。 反应器(Reactor):用于事件多路分离和分派的体系结构模式 通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞 与非阻塞 。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就转载 2012-10-15 11:51:20 · 704 阅读 · 0 评论 -
常用的TCP/IP协议的3种套接字类型如下所示
流套接字(SOCK_STREAM): 流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。 数据包套接字(SOCK_DGRAM):数据包套接字提供了一种无连接的服务。该转载 2012-10-15 11:45:21 · 3380 阅读 · 0 评论 -
Socket的阻塞模式和非阻塞模式
阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。在阻塞模式的套接字上,调用任何一个Windows Sockets API都会耗费不确定的等待时间。图所示,在调用re转载 2012-10-15 11:30:32 · 455 阅读 · 0 评论 -
使用Automake,Autoconf生成Makefile
在Unix上写过程序的人尤其是用 C 来开发程序的人一般都遇到过 Makefile,用 make 来开发和编译程序的确很方便,可是要写出一个Makefile就不那么简单了。GNU Make 那份几百页的文件,让许多人害怕。当然,现在关于make的文档比较多,不过写一个Makefile总是一件很烦人的事情,GNU Autoconf 及 Automake 这两个软件就是帮助程序开发者轻松产生Makef转载 2012-08-22 12:14:39 · 517 阅读 · 0 评论 -
autoconf
Autoconf是一个用于生成可以自动地配置软件源代码包以适应多种Unix类系统的 shell脚本的工具。由Autoconf生成的配置脚本在运行的时候与Autoconf是无关的, 就是说配置脚本的用户并不需要拥有Autoconf。 由Autoconf生成的配置脚本在运行的时候不需要用户的手工干预;通常它们甚至不需要 通过给出参数以确定系统的类型。相反,它们对软件包可能需要的各种特征进转载 2012-08-22 12:12:49 · 446 阅读 · 0 评论