
C/C++
Helloguoke
这个作者很懒,什么都没留下…
展开
-
linux下brk、mmap、malloc和new的区别
答:brk是系统调用,主要工作是实现虚拟内存到内存的映射,可以让进程的堆指针增长一定的大小,逻辑上消耗掉一块虚拟地址空间,malloc向OS获取的内存大小比较小时,将直接通过brk调用获取虚拟地址。mmap是系统调用,也是实现虚拟内存到内存的映射,可以让进程的虚拟地址区间切分出一块指定大小的虚拟地址空间vma_struct,一个进程的所有动态库文件.so的加载,都需要通过mmap系统调用映原创 2014-03-20 20:15:55 · 4364 阅读 · 0 评论 -
C++三种继承方式public、protected、private
在C++中,类继承书写方式如下:派生类的声明class 派生类名:继承方式 基类名 //其中继承方式可省略(默认的继承方式为private,例如:class A:B{};){ 新增成员声明;};其中,继承方式分为三种:public,private,protected,其区别如下:public继承:1、基类的转载 2014-03-22 22:48:52 · 2084 阅读 · 0 评论 -
vector容器与iterator容器相结合的程序分析题
#include #include #include using namespace std;int main() {// your code goes herestring str="abcd";vector vec(10,"abc");vector::iterator iter=vec.begin();cout//正确cout//错误,字符串原创 2014-03-22 23:19:18 · 742 阅读 · 0 评论 -
C++实现单链表的逆转
答:方法一:把链表中各结点的next域指向其前驱结点,并将原先第一个结点的next域设为NULL,将head指向原先链表的最后一个结点,其具体实现如下:LinkNode* ReverseLink(LinkNode **head){LinkNode *cur,*pre,*temp;cur=*head;pre=NULL;temp=NULL;while(cur!=NULL原创 2014-03-21 19:46:00 · 1070 阅读 · 0 评论 -
map、multimap、set、multiset容器
1.map、multimap、set、multiset容器的内部实现采用的是红黑树(平衡二叉查找树),其本身是二叉查找树的一种,满足二叉查找树的一般性质:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;(4)二叉查找树的查找、插入、删除等操作平均时间复杂度为O原创 2014-03-24 20:38:21 · 852 阅读 · 0 评论 -
教你透彻了解红黑树
转自: http://blog.youkuaiyun.com/v_JULY_v/article/details/6285620 教你透彻了解红黑树 作者:July、saturnman 2010年12月29日本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。推荐阅读:Left-Leaning Red-Black Trees, Da转载 2014-03-24 19:07:58 · 424 阅读 · 0 评论 -
UDP面试相关
1.UDP程序实现过程:客户端:(1)Socket():创建套接字描述符,其在套接字描述表中对应着一个套接字数据结构(2)sendto():发送数据,发送时需要指定套接字描述符,数据包,数据包大小,发送的地址和端口号(3)recvfrom():接收数据,接收时也需指定服务端的IP地址和端口号(4)closesocket():关闭套接字服务端:(1)Socket():创建套接字描原创 2014-03-25 00:07:54 · 825 阅读 · 0 评论 -
stringstream的用法 (C++用于类型转化)
ostringstream的用法【本文来自】http://www.builder.com.cn/2003/0304/83250.shtmlhttp://www.cppblog.com/alantop/archive/2007/07/10/27823.html使用stringstream对象简化类型转换C++标准库中的提供了比ANSI C的更高级的一些功能,即单纯性、类型安全和可转载 2014-08-04 10:58:48 · 452 阅读 · 0 评论 -
C++内存管理
转自:http://blog.youkuaiyun.com/zhanghefu/article/details/5003407转载 2014-07-31 10:52:01 · 427 阅读 · 0 评论 -
C++编程技巧
1、遵循编程规范,例如公司的编程规范、Google C++ 编程规范等;2、小就是美、简单就是美;3、尽可能多的使用 const 修饰符;4、声明即初始化:变量、对象声明时就初始化;5、结构、类等实例变量都以指针变量的方式使用;6、始终在使用前检测指针变量的有效性;7、指针和标量类型使用值传递,其它都使用指针和引用传递;8、多用智能指针: auto_ptr, sha转载 2014-09-24 13:49:24 · 569 阅读 · 0 评论 -
多态类中的虚函数表是Compile-Time,还是Run-Time时建立的
答:虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键。摘自:http://blog.youkuaiyun.com/lori2004/article/details/4620516翻译 2014-03-22 21:52:42 · 921 阅读 · 0 评论 -
C++派生类对象构造函数初始化顺序
答:(1)先调用基类中的构造函数(如果有多个基类,根据继承时声明的顺序进行初始化)(2)再调用成员类中的构造函数(如果有多个成员类,根据其声明的顺序进行初始化)(3)最后初始化派生类本身的构造函数#include #include class A{public:A{…} ~A{…}};class B{public:B{原创 2014-03-22 21:21:16 · 3315 阅读 · 0 评论 -
32位和64位各类型所占的字节数
一)64位系统和32位有什么区别? 1、64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存2、64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统,64bit软件的基础上的。 什么是64位处理器?之所以叫做“64位处理器”,是因为电脑内部都是实行2进制运算,处理器(C转载 2014-03-22 20:56:43 · 1639 阅读 · 0 评论 -
大小段问题
转载:http://www.cppblog.com/humanchao/archive/2012/12/26/196684.html一、什么是大小端问题(From《Computer Systems,A Programer's Perspective》)在几乎所有的机器上,多字节对象被存储为连续的字节序列,对象的地址为所使用字节序列中最低字节地址。小端:某些机器选择在存储转载 2014-03-20 23:16:57 · 1103 阅读 · 0 评论 -
宏和内联函数的区别
答:(1)宏只是简单的字符串替换,带参数的宏并不对参数表达式进行运算,而是直接进行替换;内联函数是先将参数表达式进行运算求值,然后将值传入到函数中(2)带参数的宏没有类型的概念,只有宏展开后,编译器才检查语法,存在许多安全隐患;而内联函数有参数类型,并且有返回值类型原创 2014-03-21 09:26:20 · 484 阅读 · 0 评论 -
TCP和UDP的区别
答:(1)TCP是面向字节流的;UDP是面向数据报文的(如果发送数据报文较大,IP层通常对其进行分片)(2)TCP是有连接的,可靠地传输方式(有流量控制和拥塞控制机制);UDP是无连接的,不可靠传输方式(3)TCP能用于传输大量数据,但传输速度慢;UDP一般用于传输少量数据,但传输速度比较快原创 2014-03-21 12:39:58 · 393 阅读 · 0 评论 -
堆和栈的区别
答:一般程序常分为以下5个分区:(1)堆区:由程序员自己分配和释放(new/delete || malloc/free),若程序员不释放,程序结束时可能由操作系统OS回收(2)栈区:由编译器分配和释放,通常存储由函数参数值、局部变量值及函数调用地址等(3)全局区:一般存储全局变量和静态变量,其中初始化的全局变量和静态变量放在一块,未初始化的全局变量和静态变量存放在相邻的另一区,程序结束原创 2014-03-20 22:03:19 · 482 阅读 · 0 评论 -
各种考试
1.Tcp/Ip三次握手和四次握手详细过程2.static_cast、dynamic_cast、const_cast和reinterpret_cast的区别3.linux下brk、mmap、malloc和new的区别4.linux下堆和栈的区别5.常见的各种排序,并说明原理6.const关键字含义7.宏和内联函数的区别8.指针与引用的区别9.“abc\t\nab”的原创 2014-03-19 10:21:00 · 476 阅读 · 0 评论 -
open/read/write和fopen/fread/fwrite的区别
答:(1)open/read/write是系统调用,而fopen/fread/fwrite是C语言标准库函数,后者是对前者的封装,后者的可移植性比较好。(2)open/read/write是通过文件描述符对文件进行管理的,只能读取二进制文件或文本文件,而fopen/fread/fwrite是借助文件结构体指针FILE *来对文件进行管理,可以读写字 符、字符串、格式化数据,也可以读原创 2014-04-01 23:18:59 · 1375 阅读 · 0 评论 -
内联函数和普通函数的区别
答:(1)内联函数是代码被插入到调用者代码处的函数(2)内联函数在编译时,对每次调用都生成一个副本,运行时,内联函数直接展开(类似宏)即可运行。而普通函数编译时,只生成一个副本,在运行时,需进行一些进栈出栈操作来调用函数,和初始化参数。(3)内联函数占用内存大,效率高,普通函数占用内存小,效率低原创 2014-03-20 22:51:43 · 1568 阅读 · 0 评论 -
死锁的定义及产生死锁的四个条件
答:死锁的定义:是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面。死锁的产生的四个必备条件:(1)互斥条件:某个资源同时只能有一个进程占用(2)不可抢占条件:资源只能由占有者进程自行释放,不能被申请者进程抢占(3)占有且申请条件:进程至少已经占有一个资源,但又申请新的资源(4)循环等待条件:存在一个进程序列处于循环循环等待环的状态,例如进程等待序列{P1,P2,...原创 2014-03-21 10:59:14 · 1368 阅读 · 0 评论 -
防止头文件重复引用
一、为什么会出现头文件被重复引用的问题 在一个CPP文件中,可以包含多个头文件,而头文件间又是可以相互引用的,这就导致一个CPP文件中可能间接多次包含某个头文件,如果头文件中 没有防止 多次编译的语句,就会出现头文件被重复定义的编译错误二、怎么防止 头文件被重复引用 1、使用 ifndef/define/endif 结构产生预处理块 适用条件转载 2014-03-21 14:44:47 · 1192 阅读 · 0 评论 -
C++解析JSON的好文章
使用C++处理JSON数据交换格式转载 2014-10-08 11:05:53 · 388 阅读 · 0 评论 -
static_cast、dynamic_cast、const_cast和reinterpret_cast的区别
答:static_cast是静态编译时的强制类型转换,但没有运行时类型检查来保证转换的安全性。用法:static_cast (expression)常用于基类和子类之间指针或引用的转换:上行转换(把子类的指针或引用转换成基类表示)是安全的 下行转换(把基类指针或引用转换成子类表示)是不安全的亦可用于基本数据类型或类类型(对象)之间的转换 dynamic_ca原创 2014-03-20 20:13:28 · 703 阅读 · 0 评论 -
C++ dynamic_cast转换的弊端
dynamic_cast进行不匹配指针类型转换时,会返回原创 2014-11-14 13:54:17 · 1116 阅读 · 0 评论 -
HTTP认证方式
HTTP请求报头: AuthorizationHTTP响应报头: WWW-AuthenticateHTTP认证基于质询/回应(challenge/response)的认证模式。◆ 基本认证 basic authentication ← HTTP1.0提出的认证方法 客户端对于每一个realm,通过提供用户名和密码转载 2016-05-18 11:20:31 · 429 阅读 · 0 评论 -
strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。转载 2016-06-15 17:04:00 · 423 阅读 · 0 评论 -
C++全局变量和静态全局变量的区别
1.两者作用域不同,全局变量的作用域是整个工程项目,静态全局变量作用域只在当前文件2.全局变量在其他文件引用时,需使用extern声明3.全局变量和静态全局变量都存储在静态存储区原创 2016-07-29 20:52:03 · 1600 阅读 · 0 评论 -
C++ 为什么析构函数不能抛出异常
more effective c++提出两点理由:1. 如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。2. 通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。转载 2016-07-31 12:49:07 · 571 阅读 · 0 评论 -
构造函数/析构函数不能调用虚函数
1.构造函数的初始化顺序是先调用基类的构造函数,再调用继承类构造函数,若在构造函数调用虚函数,若此时正在调用基类构造函数,继承类构造函数还未调用,则数据变量还未初始化,此时会出现未初始化定义异常2.析构函数则相反,析构函数的调用顺序是先调用继承类析构函数,再调用基类析构函数,若在析构函数调用虚函数,若此时继承类析构函数已调用完成,数据变量已经释放,则会出现未初始化定义异常原创 2016-07-31 13:37:49 · 575 阅读 · 0 评论 -
lint简介
引言:静态程序分析是指使用自动化工具软件对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查、安全缺陷检测、程序优化等。它的特点就是不执行程序,相反,通过在真实或模拟环境中执行程序进行分析的方法称为“动态程序分析(Dynamic program analysis)”。静态程序分析往往作为一个多人参与的项目中代码审查过程的一个阶段,因编写完一部分代码之后就可以进行静态分析,分析原创 2016-08-04 11:16:58 · 3654 阅读 · 0 评论 -
C++程序crash几种情况
1.空指针访问2.被0除3.野指针访问4.数组越界访问5.迭代器越界访问6.内存重复释放原创 2016-08-04 18:26:32 · 3408 阅读 · 0 评论 -
c++ STL 常用容器元素类型相关限制 指针 引用
转自: http://www.cnblogs.com/my_life/articles/4044921.htmlc++ 的 STL 中主要有 vector , list, map, set , multimap,multiset 这些容器完全支持使用内置类型和指针(指针注意内存泄露问题)。就是说乱用智能指针或其他指针作为容器元素,有可能2个元素指向同一个对象,2个元素(指转载 2016-09-22 16:58:01 · 2516 阅读 · 0 评论 -
多线程使用总结
1.多线程与多进程使用场景多进程模型是用于每个进程干自己的事,互相不影响;多线程模型是用于所有线程协调干一件事,每个线程负责一个部分。多线程模型中的线程,彼此的工作内容应该是不同的,同时又是互补的,大家完成的是同一件事的不同部分。基于这样的理解进行设计,就不存在“人弹”的可能性。所以在一般通讯服务程序的场合,绝对应该使用多进程模型。进程与线程,看着相似,实际的出发点和作原创 2016-04-05 18:54:09 · 407 阅读 · 0 评论 -
Intent scheme URL attack
Android有一个很少人知道的特性可以通过web页面发送intent来启动apps。以前通过网页启动app是通过设置iframe的src属性,例如:<iframe src="paulsawesomeapp://page1"> </iframe>此方法适用version 18或者更早版本。其他android浏览器也适用。 这个功能在安卓chrome 浏览器version 25之后版本发生了改变。不能在通过设置iframe标签的src属性来启动app了。取而代之的是你应该通过自定义scheme实现用户转载 2016-01-26 10:27:34 · 1095 阅读 · 0 评论 -
C++ 用libcurl库进行http通讯网络编程
一、LibCurl基本编程框架二、一些基本的函数三、curl_easy_setopt函数部分选项介绍四、curl_easy_perform 函数说明(error 状态码)五、libcurl使用的HTTP消息头六、获取http应答头信息七、多线程问题八、什么时候libcurl无法正常工作九、关于密码十、HTTP验证十一、代码示例 1.基本的http GET/POST操作转载 2015-09-12 08:27:33 · 611 阅读 · 0 评论 -
enum使用技巧
enum关键字是用来定义枚举类型,其一般的声明形式为:enum 枚举名 {枚举值表}; //枚举值之间的间隔是用逗号分隔其定义枚举变量的形式为:enum 枚举名 变量;//变量的值需是枚举值表中对应的值enum实例:enum WIDGET_ID { BUTTON_ID_RETURN = 1000, BUTTON_ID_CHECK_UPDATE, BUT原创 2014-11-05 15:02:38 · 792 阅读 · 0 评论 -
C++ 实现内部类访问外部类
C++内部类的实现:[cpp] view plaincopyclass outclass { public: int m; class inclass//内部类通过parent指针访问外部类的成员,包括public、private { public: void set_m(int i) {转载 2014-11-21 19:17:56 · 3166 阅读 · 0 评论 -
String类split函数的特殊分隔符
特殊符号有:$ ^ *当字符串为空字符串时,split返回的字符串数组大小为0$ ^:当字符串为非空字符串,且字符串中不存在分隔符时,split返回的字符串数组大小为2*:当字符串为非空字符串,且字符串中不存在分隔符时,split返回的字符串数组大小为0原创 2014-12-12 18:30:31 · 1042 阅读 · 0 评论 -
std::sort函数中的陷阱
前几天收到游戏中一个很严重的bug,执行某项操作的时候会出现卡死的现象。最后调试的时候定位到std的sort函数,发现一进这个函数就出不来了,很可能在里面出现了死循环。刚开始,我还是很诧异。大名鼎鼎,久经考验的的STL算法也会出现死循环?于是baidu了一下,果然在网上也发现不少人碰到过类似情况。出现死循环大多是由于在sort函数中的比较函数里面相等元素返回了true。 std的sort函转载 2015-04-23 17:13:35 · 1255 阅读 · 0 评论