- 博客(41)
- 收藏
- 关注
原创 【C/C++】C/C++内存泄漏检测
本文利用MS C-Runtime Library的Debug function对内存泄漏进行检测。Step 1. 创建LeakWatcher.h将new和malloc重新定义,malloc最终会调用_malloc_dbg,此时传入文件名和行号就能准确地定位内存泄漏的代码#ifndef LEAKWATCHER#define LEAKWATCHER#include #ifde
2012-03-20 17:16:08 413
原创 (未完)【C/C++】C++智能指针
我们知道堆上申请的空间必须通过手动释放来回收,如果忘记这一点,很容易造成内存泄漏。智能指针的引入就是为了解决如何在正确的时机(已经没有利用价值)释放堆上申请的空间,其实现原理是通过在指针外面包一层类,并在栈上生成此类的对象,当它在栈上被自动回收的时候,将堆上的空间也释放掉。1. 重新造一个轮子自定义智能指针遵循以下两个原则:1). 智能指针类必须定义为类模板,这样才能hold住所有具体
2012-02-02 16:31:02 430
转载 【C/C++】(转)定义C/C++全局变量/常量几种方法的区别
在讨论全局变量之前我们先要明白几个基本的概念:1. 编译单元(模块)在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌入式下做开发工作的话,那么你可能非常的理解编译与
2011-12-01 14:24:29 760
原创 【操作系统】Linux中C程序的内存分布情况
Linux将运行着的C程序分成不同的段,有些段的大小是固定的,有些是可变动的。1. STACK在HEAP之上,唯一一个由高地址向低地址增长的段。存放函数中的局部变量、临时变量、函数参数、返回地址、寄存器值等(文字常量和静态变量除外)。所有申请和销毁的操作由编译器负责。2. HEAP在BSS之上,向高地址增长,通过malloc/free等申请/销毁。内部实现时所有空闲空间由链表串联起
2011-11-15 11:32:07 581
原创 (未完)【操作系统】进程那些事
此文没有高深的学术讨论,只有一些浅薄的概念理解,有些内容还是转载的。一、早期的内存分配机制早期的操作系统会将程序全部装入内存,程序中所访问的内存地址都是实际的物理地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于实际物理内存的大小。这种简单的内存分配策略存在若干问题:进程地址空间不隔离。由于程序直接访问物理内存,所以恶意程序可以随意修改别的进程的内存数据。有
2011-10-29 16:18:21 375
原创 【编译器】堆栈溢出(Stack Overflow)
堆栈溢出的本质是在某次函数调用中,编译器分配的空间超过了堆栈可以允许的范围。堆栈的大小和许多因素有关:编程语言、机器架构、多线程……操作系统为每个线程分配独立的线程栈,一般情况下为1M。1. 较大的堆栈变量局部变量一般在堆栈上创建,但是如果局部变量的size太大,比如int a[1000000],就会发生堆栈溢出。这种情况下,最好从堆上分配这些空间。void foo(){ //
2011-09-28 15:04:03 1785
原创 【编译器】栈帧(Stack Frame)
栈帧(Stack Frame)是栈上的内存片段,用来实现函数调用。其主要作用有:为局部变量和临时变量分配空间,传递参数,保存返回地址。每个函数在栈上拥有独立的帧,这些帧是在函数调用时分配的。在任一时刻,寄存器ebp(帧指针)都指向帧的起始处,寄存器esp(栈指针)指向帧的结尾处,它们之间的部分是当前函数的栈帧。我们可以这样认为,ebp是局部的,作用于当前帧,而esp是全局的,作用于整个栈。
2011-09-09 17:24:00 4301
原创 【编译器】if/switch之性能分析
同为条件分支语句,但if和switch的适用范围和性能略有不同。如果将if的适用范围表示为全集,那么switch的适用范围仅仅是它的一个真子集,因为switch只适用于整型表达式,例如int、char、short、long、enum和bool。既然这样,为何还要switch?只是为了书写美观?当然不是。其实编译器像女朋友一样,默默地为我们做了很多事情。1. 当case取值范围集中时
2011-09-04 20:10:44 854
原创 (未完)四则运算溢出判断
#include int is_overflow_add_for_unsigned_int( unsigned int a, unsigned int b ){ return UINT_MAX - a }int is_overflow_add_for
2011-09-04 16:14:48 620
原创 【C/C++】C/C++系统时间
方案一 使用C标准库// ==> 只能精确到秒#include void main(){ // time_t是int类型 time_t now, now2; // 得到当前时间,以秒为单位,表示从1970-1-1 00:00:00(UTC时间)至今的秒数 time(&now); // do something... time(&now2); // 计算秒数now
2011-09-01 16:53:33 596
原创 工作不爽,上来吐槽
参加工作满四个月了,却没有在工作中感受到任何成就感。说实话,非常不愿意呆在这个组,怪只怪当初和老大说喜欢Design,才把我分到了这里。现在来说说我觉得不爽的事:除了业务逻辑,基本学不到其它知识。这对于一个刚参加工作的人来说是致命的,过分安逸的生活对年轻人非常不利,我
2011-08-25 16:17:30 363
原创 ZOJ 1671 Walking Ant (BFS)
http://acm.zju.edu.cn/show_problem.php?pid=1671该题与一般的BFS不同,它可以重复路过某点。因此如何判断可以重复路过某点呢?唯一的情况是路过该点的HP比以前路过该点时要大。
2011-08-12 10:58:05 295
原创 (未完)大端模式 vs. 小端模式
1 . 小端和大端的定义我们知道,字节是计算机上最小的存储器寻址单位,而不是位。在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。比如有int型变量x,x的地址&x = 0x00,那么x的4个字节在存储器中的位置将是0x00,0x01
2011-08-10 09:39:31 371
原创 (未完)标准C++类型转换符
C++用户自定义转换(User-Defined Conversion)C++标准转换运算符const_castC++标准转换运算符reinterpret_castC++标准转换运算符static_castC++标准转换运算符dynamic_cast
2011-08-03 14:19:28 201
原创 ZOJ 1649 Rescue (BFS)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1649做得蛋疼!!!要注意以下几点:cost[i,j]表示friend到[i,j]的代价每次队列最前元素的周围四个元素,都要计算其代
2011-08-01 22:02:59 387
原创 ZOJ 1602 Multiplication Puzzle (DP)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1602用D[i][j]表示从i到j的最小值,假设t为最后一个乘积点,则D[i][j] = min{D[i][t] + D[t][j] + a[i]
2011-07-31 18:45:02 1374 1
原创 ZOJ 1411 Anniversary (回溯)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=411回溯+剪枝:相同的归为一类,如果其中一个不可行,则其他几个也不可行。#include #include #include #include
2011-07-29 21:43:01 537
原创 ZOJ 1406 Jungle Roads (最小生成树)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=406最小生成成树之Prim算法#include #include #include #include #include #include using
2011-07-28 20:56:05 336
原创 ZOJ 1204 Additive equations (回溯)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204非递归版本,回赎+剪枝#include #include #include using namespace std;const i
2011-07-23 13:06:13 530
原创 ZOJ 1101 Gamblers (简单搜索)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=101题目意思:求满足a=b+c+d的最大a。下面给出的解法时间复杂度为n^3log(n),即先排序,查找d=a-b-c时用二分法。其实还有一种n^2
2011-07-22 20:21:57 693 1
原创 ZOJ 1091 Knight Moves (BFS)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=91马走日,注意重复走的问题#include #include #include using namespace std;#define
2011-07-21 22:10:51 369
原创 ZOJ 1093 Monkey and Banana (DP)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=93题目:有若干种方块,每个方块的各个面都可以当作底面,请问方块能叠加的最大高度(相邻方块接触面边长必须不等)?解法:题目的意思让人自然想到一种方案:
2011-07-16 01:31:04 361
原创 ZOJ 1033 Ambiguous Dates (简单搜索)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1033搜索所有可能,注意闰年!#include #include #include #include #include #incl
2011-07-11 19:58:18 436
原创 ZOJ 1084 Channel Allocation (回溯)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1084要解决此问题,可以先解决该问题的子问题:如何用N种颜色将Graph区分开(着色问题)。#include #include #i
2011-07-09 00:31:48 438
原创 ZOJ 1011 NTA (DFS)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1011简单题,DFS#include #include #include #include #include using name
2011-07-07 22:06:32 567
原创 ZOJ 1081 Points Within (几何)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1081有一些经常用的几何知识,留着备用!#include"iostream"#include"string"#include"cstdi
2011-07-06 19:48:36 338
原创 ZOJ 1047 Image Perimeters (BFS)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=10471.BFS求出所有在同一个object中的X2.计算周长时分析X的每一条边,例如是否是边界、是否和旁边某一个X相交#include
2011-07-03 21:00:43 371
原创 ZOJ 1095 Humble Numbers (构造)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1095题目意思:某数的质因数分解中只含有2,3,5或7,则称该数为丑数。已知前20个丑数为1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27。要求输出第n个丑数。输出示例:
2011-07-01 11:42:00 624
原创 ZOJ 1027 Human Gene Functions (DP)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1027题目意思:计算两个核苷酸序列的相似性。可以通过插入-符号,将两个核苷酸对应,每对核苷酸都有相应的分数。目标是求两个核苷酸序列通过对齐操作得到的最大分数。如AGTGATG和GTTAG,通过对齐AGTGATG和-GTTA-G可以得到最大分数为(-3)+5+5
2011-06-27 00:04:00 548
原创 ZOJ 1024 Calendar Game (DP)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1024#include #include int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int t, y, m, d;bool status[102][12][31];bo
2011-06-26 02:14:00 465 1
原创 ZOJ 1005 Jugs (DFS)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1005#include #include #include #include using namespace std;int ca, cb, n;bool status[1001][1001];vector v;bool fun(int a,
2011-06-24 11:31:00 420
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人