内存管理(不涉及hash管理)

#include <iostream>
#include <malloc.h>
using namespace std;
struct MemNode
{
	char *pname;//文件名
	int line;//文件所在行
	int size;//内存泄漏大小
	MemNode *link;
};

MemNode *node=NULL;//定义的头节点.

void *operator new(size_t sz,const char *pname,int line)
{
	size_t space = sz + sizeof(MemNode);
	MemNode *p = (MemNode *)malloc(space);
	p->pname=const_cast<char *>(pname);
	p->line=line;
	p->link=NULL;
	p->size=sz;
	if(node==NULL)
	{
		node=p;
	}
	else
	{
		p->link=node;
		node=p;
	}
	p=p+1;
	return p;
}

void * operator new[](size_t sz,const char *pname,int line)
{
  size_t space = sz + sizeof(MemNode);
	MemNode *p = (MemNode *)malloc(space);

	p->pname=const_cast<char *>(pname);
	p->line=line;
	p->link=NULL;
	p->size=sz;
	if(node==NULL)
	{
		node=p;
	}
  else
	{
		p->link=node;
		node=p;
	}
	p=p+1;
	return p;
}

/////////////////////////////////////
void operator delete[](void *p)
{
	MemNode *p1 = node;
	MemNode *p2 = p1->link;
	while(p1!=NULL)
	{
		if((node+1)==p)
		{
		 free(node);
		 node=p2;
		 return;
		}
		if((p2+1)==p)
		{
			p1->link = p2->link;
			free(p2);
			return;
		}
		p1=p2;
		p2=p2->link;
	}
}
void operator delete(void *p)
{
	MemNode *p1 = node;
	MemNode *p2 = p1->link;
	while(p2!=NULL)
	{
		if((node+1)==p)
		{
			free(node);
			node=p2;
			return;
		}
		if((p2+1)==p)
		{
			 p1->link=p2->link;
			 free(p2);
			 return ;
		}
		p1 = p2;//1 2
		p2 = p2->link;
	}
}

void cheak()
{
//	cout<<node->pname<<endl;
	if(node!=NULL)
	{
		cout<<node->pname<<endl;
		MemNode *p = node;
		while(p!=NULL)
		{
			cout<<"\t泄漏内存地址:"<<p<<"\t行号:"<<p->line<<"\t大小:"<<p->size<<endl;
			p = p->link;
		}
	}
	else
	{
			cout<<"没有内存泄漏!"<<endl;
	}
}

class text
{
	public:
	~text()
	{
		cheak();
	}
};//此处实现比调用atexit()好多了。
text text1;//次对象在程序结束之后析构,并且在调动析构函数的同时会自动调动内存检测函数,cheak();
#define new new(__FILE__,__LINE__)//这2个宏定义可以获取文件名以及行号。
int main()
{
	int *p = new int(10);
	double *q = new double(100.0);

	double *p1 = new double[10];
  	delete p;
  	delete q;
  	delete []p1;
	return 0;
}

时间: 2024-10-08 00:03:40

内存管理(不涉及hash管理)的相关文章

内存的段式管理和页式管理,逻辑地址-虚拟地址-物理地址

windowsx86内存管理 1.物理地址(physical address) 用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应. ——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样.所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,

Android内存管理的原理--进程管理

Android内存管理的原理--进程管理 Android采取了一种有别于 Linux 的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止.这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度. 那Android什么时候结束进程?结束哪个进程呢? 之前普遍的认识是Android是依据一个名为LRU(last recently used 最近使用过的程序)列表,将程

Hibernate事务管理-HibernateTransactionManager-对hibernate session的管理

由于对SSH还停留在比较初级的应用水平上,今天在遇到一个疑惑时折腾了很久,具体问题是这样的, 有这么一个测试方法, 1 public static void test1() { 2 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml","daoContext.xml"); 3 MgrManager mgr = (MgrManager)ctx.getBe

[Cluster]群集中Hyper-V管理器无法远程管理其他节点VM/迁移异常

环境 4个节点的Hyper-V 群集 故障现象 Hyper-V管理器无法远程管理群集中所有Hyper-V 群集中的某些VM无法成功迁移 故障原因 群集节点时间不一致 详细描述和排查过程 Hyper-V管理器无法远程管理群集中所有Hyper-V,如图: 创建测试VM时出现警报如图: 查看报告 VM是可以正常创建的,但在尝试迁移VM时. 同一群集中不同节点间迁移VM时出现"启动VM迁移出错."查看详细信息"无法通过WMI连接到该节点主机.原因可能是网络问题或该节点主机上的防火墙配

[课程分享]IT软件项目管理(企业项目甘特如是评价、维护管理、文档管理、风险管理、人力资源管理)

[课程分享]IT件项目管理(企业项目甘特图案例评价.维护管理.文档管理.风险管理.人力资源管理) 对这个课程有兴趣的朋友能够加我的QQ2059055336和我联系 课程讲师:丁冬博士 课程分类:Java 适合人群:中级 课时数量:32课时 用到技术:IT软件项目配置.IT软件项目模板的制定 涉及项目:IT软件企业项目甘特图案.IT软件项目可行性报告分析.基于svn的IT软件项目配置管理案例 更新程度:完毕 课程背景: 该课程是北风品牌项目管理课程系列之中的一个<IT项目管理>课程.通过本课程的

4--项目整体管理和项目范围管理

项目整体管理和项目范围管理 1          项目整体管理 1.1 项目整体管理的过程包括如下内容: (1)      项目启动. (2)      制定初步的项目范围说明书. (3)      制定项目管理计划. (4)      指导和管理项目的执行. (5)      监督和控制项目. (6)      整体变更控制. (7)      项目收尾.     1.2项目启动 输入 技术与方法 输出 合同 项目管理方法论 项目章程 项目工作说明书 项目管理信息系统 环境与组织因素 专家判断

SylixOS电源管理之外设功耗管理

1.前言 在这个世界中,任何系统的运转都需要能量.如树木依靠光能生长,如马儿依靠食物奔跑,如计算机系统依靠电能运行.而能量的获取是有成本的,因此如果能在保证系统运转的基础上,尽量节省对能量的消耗,就会大大提升该系统的生存竞争力.这方面,大自然已经做的很好了,如植物的落叶,如动物的冬眠,等等.而在计算机的世界里称作电源管理(Power Management). 本篇以运行SylixOS的mini2440嵌入式平台为例,分析SylixOS电源管理的外设功耗管理部分. 2.电源管理系统框架 Sylix

[课程分享]IT软件项目管理(企业项目甘特图案例评价、维护管理、文档管理、风险管理、人力资源管理)

对这个课程有兴趣的朋友可以加我的QQ2059055336和我联系 课程讲师:丁冬博士 课程分类:Java 适合人群:中级 课时数量:32课时 用到技术:IT软件项目配置.IT软件项目模板的制定 涉及项目:IT软件企业项目甘特图案.IT软件项目可行性报告分析.基于svn的IT软件项目配置管理案例 更新程度:完成 课程背景: 该课程是北风品牌项目管理课程系列之一<IT项目管理>课程.通过本课程的教学,使学生掌握IT项目管理的基本原理和基本技能,能够根据项目干系人的特征需求,确定项目的范围,经过计划

统一身份管理中的权限管理设计

关注嘉为科技,获取运维新知 权限集中管理是统一身份管理关注的主要内容之一,由于企业应用建设的自身历程不同,权限设计与实现也必然存在差异,针对集中权限管理的设计和实现带来了不小的挑战,本文根据多年的实践经验,就统一身份管理的集中权限管理的设计与实现给予设计建议. 一 问题背景 随着信息技术和网络技术的迅猛发展,企业内部的应用系统越来越多,为此,为减少用户访问的麻烦,提升访问的便利性和体验,众多企业采用了统一身份管理的方案来解决该问题. 就企业的统一身份管理,业界提出了相应的标准,即4A标准,分别是