C++
文章平均质量分 78
QQ51931373
这个作者很懒,什么都没留下…
展开
-
C++11 计时
计时有很多用途,比如:测试某一段代码的运行时间,时间越短,则性能相对越高。计时有很多方法,我将首先给出我以前常用的一种计时方法,然后给出我认为的最佳方法(采用了C++11的标准技术)。首先给出我以前常用的一种“传统”的计时方法:#include using namespace std;clock_t start = clock();// do something...cloc转载 2016-08-23 18:24:52 · 574 阅读 · 0 评论 -
windows系统上使用VS编译器时对缓冲区溢出的防范措施
0x01 /GS --缓冲区安全性检查如果使用/GS进行编译,将在程序中插入代码,以检测可能覆盖函数返回地址的缓冲区溢出。如果发生了缓冲区溢出,系统将向用户显示一个警告对话框,然后终止程序。这样,攻击者将无法控制应用程序。用户也可以编写自定义的错误处理例程,以代替默认对话框来处理错误。在返回地址之前将插入一个专门的 cookie(系列字节),以使得任何缓冲区溢出都将更改该cooki原创 2015-06-05 14:50:17 · 1862 阅读 · 0 评论 -
缓冲区溢出攻击
缓冲区溢出(Buffer Overflow)是计算机安全领域内既经典而又古老的话题。随着计算机系统安全性的加强,传统的缓冲区溢出攻击方式可能变得不再奏效,相应的介绍缓冲区溢出原理的资料也变得“大众化”起来。其中看雪的《0day安全:软件漏洞分析技术》一书将缓冲区溢出攻击的原理阐述得简洁明了。本文参考该书对缓冲区溢出原理的讲解,并结合实际的代码实例进行验证。不过即便如此,完成一个简单的溢出代码也需要原创 2015-06-05 13:22:52 · 778 阅读 · 0 评论 -
野指针
野指针,也就是指向不可用内存区域的指针。如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃。 野指针不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是野指针是很危险的,也具有很强的掩蔽性,if语句对它不起作用。 造成野指针的常见原因有三种: 1、指针变量没有被原创 2015-06-05 16:31:01 · 560 阅读 · 0 评论 -
realloc
最近在写source code时需要在数组的buffer小时重新申请一块buffer,故找了一些资料,乖乖,竟然原指针还可以“漂移”。。。。。。realloc 原型:extern void *realloc(void *mem_address, unsigned int newsize); 用法:#include 有些编译器需要#include 功能:改变mem_address原创 2015-06-24 19:11:32 · 444 阅读 · 0 评论 -
C++面试题——const 和 static
虽说不太喜欢这种问语言特性的题目,但是国内好多公司貌似就喜欢问这个,还觉得问这个很高端,就把他们常问的一些东西写下来做个总结,有的东西还是有些意思的,有些东西其实都没个固定的答案。不出意外将会写一个系列包括:const和static的区别iterator和引用的实现以及与指针的区别从dynamic_cast说C++的虚机制和对象内存布局当然也保不齐出意外就不写了。这里面不会讨论具体转载 2015-05-18 10:36:31 · 1948 阅读 · 0 评论 -
跨平台网络数据传输过程中的主机字节顺序和网络字节顺序
大端和小端:大端:在低地址存放高字节,在高地址存放低字节小端:在低地址存放低字节,在高地址存放高字节 注意:地址是左边是低地址,右边是高地址,字节是左边是高字节,右边是低字节。采用大端法存储变量和采用小端法存储变量是根据CPU来决定的。intel的CPU一般采用的是小端法. 比如:short a = 0x1234(两个16进制数字代表一个字节,所以0x12是个字节 0x3原创 2015-05-30 21:33:55 · 3061 阅读 · 2 评论 -
基本数据类型变量 结构体 union 类的内存字节对齐
系原创,转载时请帖上地址:什么叫内存字节对齐:就是在内存地址中按照一个规则(这个规则具体是什么在下面说)把一个变量放在它应该在的内存地址,而不是把变量从前到后一个紧挨着一个存放(那是 在理想状态下存在的,而理想和现实是有差距的,呵呵)。为什么要字节对齐 :CPU从数据总线中读取内存中的数据,而CPU一原创 2015-05-20 14:29:21 · 1614 阅读 · 0 评论 -
快速掌握一个语言最常用的50%
现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显,不仅浪费了时间,偏离了目标,而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家,反而忘了转载 2015-05-14 14:27:38 · 482 阅读 · 0 评论 -
那些C++牛人的博客
那些C++牛人的博客这篇文章来自转载,转载的网址找不到了,如果有人知道,可以在下面评论,非常感谢,更感谢原作者。现整理收集C++世界里那些“牛人”的个人博客。凡三类:一是令人高山仰止的大牛,对C++语言本身产生过深远的影响的人;二是C++运用炉火纯青的高手,有原创性的技术干货;三是中文世界里的C++牛人。C++大牛转载 2015-05-14 14:15:47 · 756 阅读 · 0 评论 -
c++的POD类型详解
最早看到POD(plain old data)类型,是在imperfect c++里。我觉得这是一本把我带到c++世界里的一本很重要的书。书里是这样解释POD的: 1、 所有标量类型(基本类型和指针类型)、POD结构类型、POD联合类型、以及这几种类型的数组、const/volatile修饰的版 本都是POD类型。 2、 POD结原创 2016-03-03 13:34:57 · 480 阅读 · 0 评论 -
结构体拷贝容易出错的地方
现象:现有三个结构体,分别是结构体A,结构体B,结构体C。三者之间的关系为结构体C中元素包含了结构体A和结构体B。见下:struct A{ int num; char p[4];};struct B{ int filesize; int filenum;};struct C{ int num; char p[4]; int filesize; int file原创 2016-03-03 13:42:39 · 1065 阅读 · 0 评论 -
使用memcpy()系列函数时要足够小心
memcpy()、memset()、memcmp()等这些内存操作函数经常会帮我们完成一些数据复制、赋值等操作。因为在C语言中,无论是内置类型,还是自定义的结构类型(struct),其内存模型对于我们来说都是可知的、透明的。所以,我们可以对该对象的底层字节序列一一进行操作,简单而有效。代码片段如下所示:struct STUDENT { char _name[32];原创 2016-03-03 14:01:36 · 13418 阅读 · 1 评论 -
右值引用
右值引用的功能首先,我并不介绍什么是右值引用,而是以一个例子里来介绍一下右值引用的功能: #include #include using namespace std; class obj { public : obj() { cout ">> create obj " obj(co原创 2016-10-10 16:07:52 · 299 阅读 · 0 评论 -
探索C++0x: 3. 右值引用(rvalue reference)
简介C++0x中引入了右值引用(rvalue reference)这个设施,形如T&&,用来实现移动语义(move semantics)和完美转发(perfect forwarding)。此前C++中有一个著名的性能问题——复制临时对象,由于右值引用的引入,该问题将得到极大的改善。虽然右值引用的引入是一个很了不起的进步,也是一个明智的决定,但它并不那么讨人喜欢,至少我觉得如此。原因原创 2016-08-12 17:12:22 · 339 阅读 · 0 评论 -
小问题大思考之C++临时对象
C++中有这样一种对象:它在代码中看不到,但是确实存在。它就是临时对象---由编译器定义的一个没有命名的非堆对象(non-heap object)。为什么研究临时对象?主要是为了提高程序的性能以及效率,因为临时对象的构造与析构对系统性能而言绝不是微小的影响,所以我们应该去了解它们,知道它们如何造成,从而尽可能去避免它们。临时对象通常产生于以下4种情况:类型装换按值传转载 2016-08-02 18:46:24 · 366 阅读 · 0 评论 -
“C++的数组不支持多态”?
先是在微博上看到了个微博和云风的评论,然后我回了“楼主对C的内存管理不了解”。后来引发了很多人的讨论,大量的人又借机来黑C++,比如://@Baidu-ThursdayWang:这不就c++弱爆了的地方吗,需要记忆太多东西//@编程浪子张发财:这个跟C关系真不大。不过我得验证一下,感觉真的不应该是这样的。如果基类的析构这种情况不能 调用,就太弱了。//@转载 2016-08-02 16:19:51 · 725 阅读 · 0 评论 -
分清成员函数,非成员函数和友元函数
成员函数和非成员函数最大的区别在于成员函数可以是虚拟的而非成员函数不行。所以,如果有个函数必须进行动态绑定(见条款38),就要采用虚拟函数,而虚拟函数必定是某个类的成员函数。关于这一点就这么简单。如果函数不必是虚拟的,情况就稍微复杂一点。看下面表示有理数的一个类:class rational {public: rational(int numerator = 0, int den转载 2016-07-01 17:55:22 · 731 阅读 · 0 评论 -
STL容器
什么是容器首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是“容器类是一种对特定代码重用问题的良好的解决方案原创 2016-06-01 12:31:43 · 1300 阅读 · 0 评论 -
C++对象模型之详述C++对象的内存布局
转载自:http://blog.csdn.net/ljianhui/article/details/46408645在C++对象模型之简述C++对象的内存布局一文中,详细分析了各种成员变量和成员函数对一个类(没有任何继承的)对象的内存分布的影响,及详细讲解了如何遍历对象的内存,包括虚函数表。如果你在阅读本文之前,还没有看过C++对象模型之简述C++对象的内存布局一文,建议先阅读转载 2016-03-13 22:30:13 · 396 阅读 · 0 评论 -
深入理解C++的动态绑定和静态绑定
为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误,需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。关于对象的静态类型和动态类型,看一个示例:class B{}class转载 2016-03-09 10:10:29 · 361 阅读 · 0 评论 -
C++多重继承下的指针类型转换
在C++中,指针的类型转换是经常发生的事情,比如将派生类指针转换为基类指针,将基类指针转换为派生类指针。指针的本质其实就是一个整数,用以记录进程虚拟内存空间中的地址编号,而指针的类型决定了编译器对其指向的内存空间的解释方式。基于上面的理解,我们似乎可以得出一个结论,C++中对指针进行类型转换,不会改变指针的值,只会改变指针的类型(即改变编译器对该指针指向内存的解释方式),但是这个结论在C+原创 2016-03-09 11:46:59 · 542 阅读 · 0 评论 -
typedef 和 define的区别 和 陷阱
typedef和#define的用法与区别一、typedef的用法在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:typedef int INT;typedef int ARRAY[10];typedef (int*) pINT;typedef可以增转载 2015-05-09 14:09:21 · 432 阅读 · 0 评论 -
虚拟继承体系下对象的大小
#include "stdafx.h"#include class X{//int count;};class Y:public virtual X{};class Z:public virtual X{};class A:public Y,public Z{};int _tmain(int argc, _TCHAR* argv[原创 2015-04-17 14:16:37 · 336 阅读 · 0 评论 -
C语言陷阱之差一错误
差一错误(英语:Off-by-one error,缩写OBOE)是在计数时由于边界条件判断失误导致结果多了一或少了一的错误,通常指计算机编程中循环多了一次或者少了一次的程序错误,属于逻辑错误的一种。比如,程序员在循环中进行比较的时候,本该使用“小于等于”,但却使用了“小于”,或者是程序员没有考虑到一个序列是从0而不是1开始(许多程序语言的数组下标都是这样)。在数学领域,此错误也时有发生。原创 2015-04-26 13:12:28 · 2927 阅读 · 0 评论 -
C++中容易被忽略,也没多少人能彻底搞懂的..
字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。常见的获取字符串长度的方法包括如下几种。 1.使用sizeof获取字符串长度sizeof的含义很明确,它用以获取字符数组的字节数(当然包括结束符\0)。对于ANSI字符串和UNICODE字符串,形式如下: sizeof(cs)/sizeof(char) sizeof(ws)原创 2014-06-17 17:25:23 · 692 阅读 · 0 评论 -
C语言结构体里的成员数组和指针
原文转自:http://coolshell.cn/articles/11377.html单看这文章的标题,你可能会觉得好像没什么意思。你先别下这个结论,相信这篇文章会对你理解C语言有帮助。这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接。微博截图如下。我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章。为了方便你把代码copy过去转载 2014-07-24 21:46:02 · 525 阅读 · 0 评论 -
编写安全的C/C++代码
http://wenku.baidu.com/link?url=fSXrB3azTl6Ppn5iEXHptPQzZLtMNfvD2n_P1EARtTuxl4ADaDtiS1_IMFtNlWaalm9Z7305eEr3aXCvJRYIfdVX20iv7iaNOkmduafGTe7&pn=50原创 2014-05-29 16:45:46 · 922 阅读 · 0 评论 -
详解 sizeof 和 strlen
判断数据类型长度符的关键字用法:sizeof(类型说明符,数组名或表达式); 或sizeof 变量名定义sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, ass原创 2014-07-01 18:35:15 · 558 阅读 · 0 评论 -
C++四种强制类型转换运算符
C++有四种强制类型转换符,分别是dynamic_cast,const_cast,static_cast,reinterpret_cast。其中dynamic_cast与运行时类型转换密切相关,在这里我们先介绍dynamic_cast,其他三种在后面介绍。1、dynamic_cast运算符该转换符用于将一个指向派生类的基类指针或引用转换为派生类的指针或引用。原创 2014-07-01 18:39:28 · 680 阅读 · 0 评论 -
运行时错误检查(/RTC)编译选项及实现原理
运行时错误检查(/RTC)编译选项及实现原理 作者:童磊(magictong) 环境:VS2005前因后果:debug居然编不过!!!这里准备说4个例子,都是为了说明debug版本对于调试是很重要的,很多问题在调试版本下都会提前暴露出来。 注意:随意调整优化,可调试选项可能会遇到下面的编译错误:Command line error D8016 : '/O原创 2014-04-10 20:55:35 · 1532 阅读 · 0 评论 -
对c++下的STL 模仿,并移置到C下
http://bbs.chinaunix.net/thread-848385-1-1.html转载 2014-04-17 10:46:27 · 576 阅读 · 0 评论 -
__try,__except,__finally,__leave异常模型机制
yu从本篇文章开始,将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型。主人公阿愚将在这里与大家分享SEH( 结构化异常处理)的学习过程和经验总结。 深入理解请参阅>第23, 24章. SEH实际包含两个主要功能:结束处理(termination handling)和异常处理(ex转载 2014-04-15 23:35:09 · 611 阅读 · 0 评论 -
异常处理
http://www.vckbase.com/index.php/wv/1562http://bbs.csdn.net/topics/390368275原创 2014-04-15 18:52:06 · 620 阅读 · 0 评论 -
位运算以及用途详解
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。原创 2014-08-05 11:03:22 · 16838 阅读 · 6 评论 -
【C++专题】static_cast, dynamic_cast, const_cast探讨
首先回顾一下C++类型转换:C++类型转换分为:隐式类型转换和显式类型转换第1部分. 隐式类型转换又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 int ival = 3;double dval = 3.14159;原创 2014-08-07 17:37:10 · 631 阅读 · 0 评论 -
C++位运算详解
前言以前收藏过一篇讲C++位操作的文章,这次博客搬家,以前的数据都没有保留,整理谷歌网站管理后台的时候,发现不时的还有网友有在查找这篇文章。所以,疯刀也来弄个简单的教程,讲讲位操作的用途和魅力吧。位简介位是数据存储的最小单位。在 计算机中的二进制数系统中,位,简记为b,也称为比特,每个0或1就是一个位(bit)。位操作详解我们先来看看位运算操作符:& (按位与)、| (原创 2014-08-07 19:05:57 · 589 阅读 · 0 评论 -
C++库
有一些比较好的开源框架可以学习,比如:1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:Web Bench Homepage转载 2015-04-24 16:52:09 · 401 阅读 · 0 评论 -
一个关于strcpy()的问题,呵呵
char* mystrcpy(char* dest, const char* source){ assert(dest!=NULL && source!=NULL); char *address = dest; while( (*dest++ =*source++) != '\0') {} return address;}int _原创 2015-04-24 16:27:49 · 1891 阅读 · 0 评论 -
一步一步写算法(开篇)
转载自:http://blog.csdn.net/feixiaoxing/article/details/6835423算法是计算机的生命。没有算法,就没有软件,计算机也就成了一个冰冷的机器,没有什么实用价值。很多人认为,算法是数学的内容,学起来特别麻烦。我们不能认为这种观点是错误的。但是我们也知道,软件是一种复合的技术,如果一个人只知道算法,但是不能用编程语言很好地实现,那么再优秀的转载 2015-03-09 11:36:45 · 445 阅读 · 0 评论