随笔分类 - C++ Memory
摘要:全部在App中完成 1.在 App.h 头文件声明 #ifdef _DEBUGprotected: CMemoryState m_msOld, m_msNew, m_msDiff;#endif // _DEBUG 2.在 App::InitInstance() 中添加如下代码: #ifdef _DE
阅读全文
摘要:非常典型的基础知识,转自http://www.ruanyifeng.com/blog/2013/11/stack.html学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈"。 理解这个概念,对于理解程序的运行至关重要。容易混淆的是,这个词其实有三种含义,适用于不同的场合,必须加以区分
阅读全文
摘要:一直比较好奇,调试器是如何生成堆栈的调用过程的,比如如下代码: int add(int a, int b){ return a + b;}int main(){ int c = add(1, 2); system("pause"); return 0;} 调用Add时的堆栈截图如下:调试器究竟是如何
阅读全文
摘要:尽管这个概念已经让人说滥了 ,还是想简单记录一下, 以备以后查询。 #ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)#else#define DEBUG_CLIENTBLOCK#endif#d
阅读全文
摘要:以前写过一篇理解程序内存, 当时主要是针对用户态,下面再稍微深入一点: 我们以32位程序为例(不启用AWE), 总共4G虚拟空间,其中低2G属于用户态, 高2G属于操作系统内核, 每个程序都有自己的低2G用户空间, 高2G内核空间是所有程序共享的。高2G内核空间中, 属于同一Session的程序又共
阅读全文
摘要:昨天有人在QQ群里问到如何判断一个C++对象是否在堆栈上, 我在网上搜索了下, 搜到这个么一个CSDN的帖子http://topic.csdn.net/t/20060124/10/4532966.html ,可惜它也没有给出一个合适的答案。要解答这个问题,其实就是要知道的堆栈的起始地址, 而我们知道
阅读全文
摘要:在帖子如何判断一个C++对象是否在堆栈上 中, 又有人提出如何判断一个C++对象是否在堆上。其实我们可以参照那个帖子的方法类似实现,我们知道堆就是Heap,在windows上我们可以通过GetProcessHeaps来得到所有的堆句柄,而我们这里只要知道Windows上的Heap Handle,其实
阅读全文
摘要:关于 C++中new背后的行为, 以前已经写过一篇了 理解C++中new背后的行为, 但是里面也只是泛泛而谈,没有真凭实据, 下面我们从汇编的角度看C++编译器究竟在背后干了什么? 我们的代码很简单, 如下: #include <iostream> class A { public: virtual
阅读全文
摘要:一直以来觉着core dump这个东西很神奇,在初步学习的时候也没有个大方向,最近项目需要记录程序崩溃时的日志信息,因此在网上寻找相关的信息,此时core dump也成为了我重点关注的东西。 说说我的辛酸历史吧,刚毕业1年的我,C++领域的东西还是知之甚少啊,记得又一次面试被问起了dump文件,我当
阅读全文
摘要:最近在做程序异常时堆栈信息获取相关工作,上一篇文章成功的在程序creash时写下了dump文件,而有些情况写dump文件是 不可以的,比如在jni开发时,C++只做底层处理,而整个项目是android工程,这个时候dump文件没有了优势,那么只能在程序 creash时把内存信息打印出来,获取输出到文
阅读全文
摘要:https://msdn.microsoft.com/en-us/library/windows/desktop/ms683219(v=vs.85).aspx 例子: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682050(
阅读全文
摘要:You can use Microsoft Platform SDK functions to get the heap size at a specific point. If get the heap size at point A in your code, and then again at
阅读全文
摘要:VC (_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE) 问题记录 VC内存溢出一例 –- 调用约定不一致 (_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE)最近在写一个程序,调用了多个DLL,每个DLL代码都支持多线程,D
阅读全文
摘要:原文标题:Anatomy of a Program in Memory 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。] 内存管理模块是操作系统的心脏;它对应用程序和系统管理非常重要
阅读全文
摘要:为什么是清一色的“烫”字呢?因为调试的时候,我们用到的断点中断指令(INT 3)的二进制表示是11001100(0xCC),而“烫”字的汉字编码是0xCC,0xCC,因此调试器为了能尽可能捕获程序的缓冲区溢出等错误,用INT 3也就是0xCC填充16字节对齐的函数之间的间隙、未初始化的栈变量等。当这
阅读全文
摘要:今天遇到一个问题: 假设在每个系统的structA 结构不同,我们在windbg看了以后直接拿来用,自己定义成结构体,如何来验证这个结构体内存布局是否和windbg一致。 当然笨办法是自己一个个成员数过去,然而人眼总有看错的时候,你承认吧~~。这里用一个极其巧妙的方式解决这个问题 在vs当前工程中,
阅读全文
摘要:const 和 static 变量,可以放在头文件中 const对象默认是static的,而不是extern的,所以即使放在头文件中声明和定义。多个cpp引用同一个头文件,互相也没有感知,所以不会导致重复定义。 类(class)的定义,可以放在头文件中 用类创建对象的时候,编译器要知道对象如何布局才
阅读全文
摘要:前言 PC-lint是一款小而强大的C/C++静态代码检查工具,它可以检查未初始化变量,数组越界,空指针等编译器很难发现的潜在错误。在很多专业的软件公司如Microsoft,PC-Lint检查无错误无警告是代码首先要过的第一关。 安装配置 有关安装步骤,请参考附录中的文章“静态代码检查工具PC-Li
阅读全文
摘要:前言:利用drwtsn32或NTSD进行程序崩溃处理,都可以生成可用于调试的dmp格式文件。使用VS2005打开生成的DMP文件,能很方便的找出BUG所在位置。本文将讨论以下内容: 1、 程序编译选项 2、 利用VS2005 分析dump文件 3、 常见问题讨论 一、 程序编译选项 PDB file
阅读全文