`
javayestome
  • 浏览: 1050086 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

初试linux下动态链接库,求牛人帮忙阿~!

阅读更多
直接上代码,一个跟踪内存分配的类,可以检测是否有内存泄露:

头文件
#ifndef MEMCHECK_H
#define MEMCHECK_H

#include<cstddef>

#ifdef _cplusplus
extern "C"{
#endif

void* operator new(std::size_t ,const char* ,long);
void* operator new[](std::size_t ,const char* ,long);

#define new new(__FILE__,__LINE__)

extern bool traceFlag;
#define TRACE_ON() traceFlag =true
#define TRACE_OFF() traceFlag = false

extern bool activeFlag;
#define MEM_ON() activeFlag = true
#define MEM_OFF() activeFlag = false

#ifdef _cplusplus
}
#endif

#endif


cpp文件

#include<cstdio>
#include<cstdlib>
#include<cassert>
#include<cstddef>
using namespace std;
#undef new

bool traceFlag = true;
bool activeFlag = false;

namespace {
struct Info{
void* ptr;
const char* file;
long line;
};
const size_t MAXPTRS=10000u;
Info memMap[MAXPTRS];
size_t nptrs=0;

int findPtr(void* p){
for(size_t i=0;i<nptrs;++i)
if(memMap[i].ptr==p)
return i;
return -1;
}

void delPtr(void* p){
int pos=findPtr(p);
assert(pos>=0);
for(size_t i=pos;i<nptrs-1;++i)
memMap[i]=memMap[i+1];
--nptrs;
}

struct Sentinel{
~Sentinel(){
if(nptrs>0){
printf("Leak memory at:\n");
for(size_t i=0;i<nptrs;i++)
printf("\t%p(file:%s,line %ld)\n",
memMap[i].ptr,memMap[i].file,memMap[i].line);
}
else
printf("No user memory leaks\n");
}
};

Sentinel s;
}//end of anonymous namespace

void*
operator new(size_t siz,const char* file ,long line){
void* p=malloc(siz);
if(activeFlag){
if(nptrs==MAXPTRS){
printf("memory map too small(intcrease MAXPTRS)\n");
exit(1);
}
memMap[nptrs].ptr=p;
memMap[nptrs].file=file;
memMap[nptrs].line=line;
++nptrs;
}
if(traceFlag){
printf("Allocate %u bytes at address %p",siz,p);
printf("(file: %s,line : %ld)\n",file,line);
}
return p;
}

void*
operator new[](size_t siz,const char* file,long line){
return operator new(siz,file,line);
}

void operator delete(void *p){
if(findPtr(p)>=0){
free(p);
assert(nptrs>0);
delPtr(p);
if(traceFlag)
printf("Deleted memory at address %p\n",p);
}
else if(!p && activeFlag)
printf("Attempt to delete unknown pointer:%p\n",p);
}

void operator delete[](void *p){
operator delete(p);
}


生出动态链接库 g++ -shared -fpic libmemcheck.so

调用的时候g++ xx.cpp -L. -lmemcheck

效果很好,有个对比,size一下
text data bss dec hex filename
7664 388 120204 128256 1f500 a.out
text data bss dec hex filename
6176 380 180 6736 1a50 a.out

但是有个问题阿,只能把so文件扔到/usr/lib 下,才可以跑,否则找不到。牛人帮忙阿~!



分享到:
评论

相关推荐

    linux 初试牛刀

    "Linux 初试牛刀"这个主题恰好为新手提供了入门的平台,通过课件和安装包,你可以逐步了解并掌握Linux的基础知识。 Linux是一种自由和开放源码的操作系统,其内核由林纳斯·托瓦兹于1991年创建。Linux系统广泛应用...

    新人教统编版五年级下册语文 交流平台与初试身手 课件.pptx

    在技巧讲解之后,课件通过《小嘎子和胖墩儿摔跤》这一情节,向学生展示了动态描写的重要性。在这个故事中,小嘎子的机智和胖墩儿的力量形成鲜明对比,通过对其动作、心理和神态的细致描绘,比赛的紧张气氛被生动地...

    新人教统编版六年级下册语文 交流平台与初试身手课件 教学课件.pptx

    新人教统编版六年级下册语文教材中的“交流平台与初试身手”便是这一理念的贯彻。本课程旨在通过具体的情境教学,引导学生理解并掌握“借景抒情”的写作技巧,使学生能够在描写环境中自然而然地表达个人情感。 借景...

    《Linux从入门到精通》

    Linux操作系统入门书,比较全面 目录 0 前言 0.1 什么是Linux? 0.2 本手册概述 0.3 速查信息 0.4 从以前版本的Red Hat Linux升级 0.5 开发者的话 0.6 编者的话 1 Red Hat Linux 5.1新特性 1.1 安装性能的...

    西南交大初试相关

    西南交通大学作为电气工程及其相关学科研究的重要学术阵地,其研究生入学考试(初试)一直备受关注,尤其是电力电子与电力系统分析这两个专业课目。对于志在报考西南交大研究生的学子而言,掌握这两个领域的核心知识...

    基于c++的研究生初试录取管理系统全文件

    本系统是针对研究生初试录取流程而设计的一个管理软件,采用C++编程语言在Visual Studio环境下实现。C++是一种广泛应用的面向对象编程语言,以其高效、灵活性和强大的功能著称,尤其适合开发这种涉及到数据管理和...

    Linux2.6内核驱动移植

    6. 符号导出:在Linux2.6内核中,只有显示的导出符号才能被其他模块使用,默认情况下不导出所有的符号,老版本默认导出所有的符号,除非使用EXPORT_NO_SYMBOLS宏。 7. 内核版本检查:在Linux2.6内核中,需要在多个...

    csp - j初试模拟卷.docx

    csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟...

    linux从入门到精通.chm

    E.6.14 我不能在系统的1023柱面下安装Linux, 我该怎么办? E.6.15 我想把LILO从我的机器的MBR中移去, 如何做? E.6.16 我想把Linux从我的硬盘中删除. 我使用DOS的fdisk, 它显示出非DOS分区, 但不能删除. 怎么办? E....

    软件工程初试.zip

    《软件工程初试》资料集合是为准备武汉科技大学计算机专业考研初试的考生精心整理的一份宝贵资源。这个压缩包涵盖了三个主要部分:期末考试试卷、历年真题以及模拟预测题,旨在帮助考生全面深入地理解和掌握软件工程...

    南邮微机原理初试考研真题(2002~2014年).7z

    《南邮微机原理初试考研真题(2002~2014年)》这个压缩包文件集合了南京邮电大学微机原理课程近十二年的考研真题,虽然不是高清版本,但作为复习资料,对于备考南邮计算机相关专业研究生的学生来说,其价值不可忽视...

    最新人教版小学四年级语文下册《交流平台初试身手》精品课件-.pdf

    最新人教版小学四年级语文下册《交流平台初试身手》精品课件-.pdf

    Linux从入门到精通

    E.6.14 我不能在系统的1023柱面下安装Linux, 我该怎么办? E.6.15 我想把LILO从我的机器的MBR中移去, 如何做? E.6.16 我想把Linux从我的硬盘中删除. 我使用DOS的fdisk, 它显示出非DOS分区, 但不能删除. 怎么办? E....

    某公司的C++初试题

    动态链接库(DLL)是C++编程中一个重要的知识点,特别是在游戏开发中,它能够有效地减少内存占用、提高代码重用率和程序加载速度。 动态链接库是一种可执行文件格式,允许多个程序共享同一段代码,而不是每个程序都...

    大连大学2023年初试科目大纲汇总.rar

    《大连大学2023年初试科目大纲汇总》是一份重要的教育资源,主要涵盖了该校硕士研究生入学考试的各项科目大纲。这份压缩文件的目的是为考生提供清晰的考试范围和学习指南,帮助他们有效地准备初试。以下是根据文件名...

    新人教统编版四年级下册语文 交流平台与初试身手 教学课件.pptx

    在新人教统编版四年级下册语文的教学课件中,"交流平台与初试身手"这一单元主要聚焦于教授学生如何有效地写作游记,尤其是如何按照游览的顺序描绘景物,突出重点,以及如何设计和描述参观路线。下面我们将深入探讨这...

    武汉理工初试复试汇总

    【武汉理工初试复试汇总】是一份针对武汉理工大学研究生入学考试的数据结构复习资源包,包含了丰富的学习材料和考试经验分享,旨在帮助考生更好地准备852数据结构这门科目,从而顺利通过初试和复试。 在数据结构的...

    研究生初试录取管理系统

    ### 知识点一:研究生初试录取管理系统的架构与实现 #### 1.1 系统概述 研究生初试录取管理系统是一款基于C++语言开发的应用程序,旨在帮助教育机构高效地管理和处理研究生入学考试的相关数据。该系统通过定义结构...

Global site tag (gtag.js) - Google Analytics