随笔分类 - Under Code
摘要:double a = 99.012345678912351; double b = 99.012345678912352; bool bEqual = a == b; /*TRUE*/ a == b: 使用double类型默认精度来比。 |a-b| < MINVAL: 我们指定精度来比。 都行。看情况来定用哪种。
阅读全文
摘要:具有动态的分配和释放内存的能力是C/C++程序语言的重要特色之一。VisualC++ debugger和CRT库提供了一系列有效的检测和鉴定内存泄漏的工具。 设置内存泄漏检测 检测内存泄漏的基本工具是调试器和CRT调试堆函数。为了使用调试堆函数,在你的程序中你必须含有下面的说明: #define _CRTDBG_MAP_ALLOC #include...
阅读全文
摘要:1. Use _CrtDumpMemoryLeaks() to check whether there is memory leak in program. With the help of _CRTDBG_MAP_ALLOC, it can output memory leak info with file line info for those memory block allocat...
阅读全文
摘要:一、在调试模式下,new操作符号通过宏定义转换成了调试版本。 在文件头经常可以发现以下语句: #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif 其中,将new定义为DEBUG_NEW 二、DEBUG_NEW的处理 调试版本的new操作函数:void* ...
阅读全文
摘要:short usData = 0x1122; char *pucData = (char*)&usData; bool bBigEndian = (*pucData == 0x22);
阅读全文
摘要:注:以下内容部分引自CSND中相关讨论的帖子,并结合自己的理解整理而成。仅供参考。 1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritchie ...
阅读全文
摘要:[转载自: http://www.cppblog.com/szhoftuncun/archive/2007/10/31/35356.html] #pragma once与 #ifndef的区别 Specifies that the file will be included (opened) only once by the compiler when compiling a source co...
阅读全文
摘要:C和C++对函数的处理方式是不同的.extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus ...
阅读全文
摘要:[摘自:http://www.cnblogs.com/omygod/archive/2006/11/08/554601.html] C++将内存划分为三个逻辑区域:堆、栈和静态存储区。既然如此,我称位于它们之中的对象分别为堆对象,栈对象以及静态对象。 三种内存对象的比较 栈对象的优势是在适当的时候自动生成,又在适当的时候自动销毁,不需要程序员操心;而且栈对象的创建速度一般较堆对象快,...
阅读全文
摘要:Physical memory、Pagefile和进程地址空间的关系--搞搞清爽啦! 当用户进程中的一个线程试图访问进程的地址空间中的一个数据块的时候。一般会发生两种情况: 1. 线程试图访问的数据是在RAM中,则cpu只需要将虚拟地址mapping到内存的物理地址中,然后执行需要的访问。 2. 数据不在RAM中,而是放在页文件的某个地方。这时候,访问引起页面失效,cpu将通知操作系统,操作系统...
阅读全文
摘要:Q: 我们需要在Dll中new一个class或者struct的实例,通过接口把这个实例传给了主程序(调用dll的程序),最后这个实例的释放(delete)是由主程序来执行的,这时我们的问题出现了,vs.net抛出一个debug模式下的异常,是在delete函数中。后来我试了另外一种情况,即在主程序中new的实例在dll中delete也会有相同的问题。哪位大侠知道为什么? ...
阅读全文
摘要:编译器调用虚拟函数的汇编码(参考think in c++): push funparam ;先将函数参数压栈 push si ;将this指针压栈,以确保在当前类上操作 mov bx,word ptr[si] ;因为vc++编译器将vptr放在类的第一个位置上,所以bx内为vptr call word ptr[bx+n] ;调用虚拟函数。n = 所调用的虚拟函数在对应 vt...
阅读全文
摘要:在C++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联涵数。 在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。 inline函数在被调用的地方,实际上是把函数体的代码部分重复了一遍,而不是象普通函数那样将参数压栈,然后call ....,这样做可以减少函数的调用时间,提高程序执行的效率,但是如...
阅读全文
摘要:tlb文件:com类型库文件。在需要使用对应com类的模块里,“#import ...*.tlb”使用之。 tlh、tli文件:他们是vc++编译器解析tlb文件生成的标准c++文件。因为odl和tlb并不是C++标准的东东,有必要把它们翻译成标准的C++类型,使得C++开发者可以使用。相信vb和j++也会把tlb翻译成自己语言兼容的类型描述信息。tlh相当于类型申明(头文件),tli相当于定义实...
阅读全文
摘要:由于我们经常要调用一些第三方厂商或其他编译器编写的动态链接库,但是一般都不提供源文件或.lib文件,而作为VC隐式链接到DLL (implicitly link to the DLL)调用,这些却是必需的。本文将主要讨论在没有源文件及.lib输入库文件或欲调用 Windows未公开函数的情况下重建.Lib文件的方法。在建立之前,我们首先要了解一下DLL输出函数的几种方式。 一、从DLL中输出函数的...
阅读全文
摘要:堆和栈的区别 (转贴) 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥! 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 ...
阅读全文
摘要:由于输入节只包含一个dll名字而没有它的路径名,因此加载程序必须搜索用户的磁盘驱动器来找到dll。加载程序的搜索顺序: 1)包含可执行映像文件的目录; 2)进程的当前目录(SetCurrentDirectory(), GetCurrentDirectory()); 3)windows系统目录; 4)windows目录; 5)PATH环境变量中列出的各个目录。
阅读全文
摘要:In no particular order, the defenses offered by the Visual C++ toolset are: Stack-based Buffer Overrun Detection (/GS) Safe Exception Handling (/SafeSEH) Data Execution Prevention (DEP) ...
阅读全文
摘要:Big-Endian 和 Little-Endian 字节排序 字节排序 含义 Big-Endian 一个Word中的高位的Byte放在内存中这个Word区域的低地址处。 Li...
阅读全文
摘要:1. 什么是makefile makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。make命令执行时,需要一个 Mak...
阅读全文

浙公网安备 33010602011771号