windows程序员进阶系列:<软件调试>之堆 (一) 堆是软件在运行时动态申请内存空间的主要途径.从堆上申请来的空间需要程序员自己申请和释放,且申请和释放操作必须绝对匹配.忘记释放或者多次释放可能会导致严重问题. 与栈类似,使用堆的过程中也会由于向堆中写入超过所申请堆大小的数据,覆盖堆上的其他内容,而导致堆溢出问题. 由于堆的特殊性,一旦堆被破坏将会导致一些严重的问题.由于如果对堆不够了解的话对于这些问题将会手足无措.本文将会详细的介绍堆的方方面面,通过以下几篇文章的讲解便可以很清晰的了解堆…
Win32堆的调试支持 为了帮助程序员及时发现堆中的问题,堆管理器提供了以下功能来辅助调试. 1:堆尾检查(Heap Tail Check) HTC,在堆尾添加额外的标记信息,用于检测堆块是否溢出. 2:释放检查(Heap Free Check)在释放堆块时进行检查,防止释放同一个堆块. 3:参数检查,对传递给堆的各种参数进行更多的检查. 4:调用时验证(Heap Validate On Call)HVC,每次调用堆函数时都对整个堆进行验证和检查. 5:堆块标记(Heap Tagging)为堆块…
 win32堆及内部结构 Windows在创建一个新的进程时会为该进程创建第一个堆,被称为进程的默认堆.默认堆的句柄会被保存在进程环境块_PEB的ProcessHeap字段中. 要获得_PEB的地址,可以通过$peb伪寄存器来获得,dt _PEB @$peb.也可以通过.process获得. 如上图ProcessHeap字段即为进程默认堆.其上的HeapSegmentReserve是进程堆的预订(默认为1MB)大小.HeapSegmentCommit是进程堆的初始提交大小.默认值为2个内存页大小…
本文转载自:https://blog.csdn.net/u013553529/article/details/70306899 Boostnote:适合程序员的笔记软件 注意: Boostnote正在开发中,需要鼓励和耐心等待其完善,或者加入他们一起改进 Boostnote,真心希望 Boostnote 坚持下去. 1. Boostnote 介绍 Boostnote 官网:https://boostnote.io Boostnote is the simple note-taking app f…
PHP程序员进阶学习书籍参考指南 @heiyeluren lastmodify: 2016/2/18     [初阶](基础知识及入门)   01. <PHP与MySQL程序设计(第4版)>  http://item.jd.com/10701892.html 02. <深入浅出MySQL 数据库开发 优化与管理维护 第2版> http://item.jd.com/11381295.html  *浅读 03. <实战Nginx:取代Apache的高性能Web服务器> ht…
谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackoverflow/github的搬运工,其实个人觉得也没什么不好的,闻道有先后,术业有专攻,确实有工作岗位就需要这样的职位.但是计算机行业的发展有其方向,工程师的职业发展也有其方向,随着经验的积累,可能这样的人回头再看看自己写的代码也会觉得不太好.那么如果有一天这样的人想换工作,或者应聘体质比较完整的公司,…
我写的程序员面试系列 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Java Marker Interface(标记接口) 使用JDK自带的工具jstack找出造成运行程序死锁的原因 编程面试题:编写一个会造成数据库死锁的应用 JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载 使用JavaScript ES6的新特性计算Fibonacci(非波拉契…
开发环境选择 vim,vscode,qt,visual studio都可以做linux c++开发,但是作为windows程序员,最熟悉的还是visual stuio,加上visual studio 2019 支持cmake及linu开发,所以最终选择了visual studio 2019 + cmake作为开发环境.同时使用虚拟机中的ubuntu作为编译机. 学习cmake基本用法 学习设置包含路径; 学习设置库搜索路径; 学习设置动态库静态库的导入; 选择boost作为基础库 有许多常用算法…
如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大.我写这篇文章并不是想贬低windows下面开发的人,做windows开发的人看了可能会感觉不舒服,我并不是这个意思,我只是说说我自己的感受,我最早开始学习编程也是在windows下面的, 学的是VB,后来转到VC++,当时用的是VC6.0, 做windows下面的开发5年后转入linux下面做开发的,开始在li…
如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大.我写这篇文章并不是想贬低windows下面开发的人,做windows开发的人看了可能会感觉不舒服,我并不是这个意思,我只是说说我自己的感受,我最早开始学习编程也是在windows下面的, 学的是VB,后来转到VC++,当时用的是VC6.0, 做windows下面的开发5年后转入linux下面做开发的,开始在li…