您的位置:首页 > 运维架构 > Linux

C++监测资源泄漏(二) ---- Linux 进程内存布局

2011-04-08 15:54 281 查看
    前文中给出了一种判断对象在内存中的静态数据区、堆还是栈上的判断方法,但必须根据各操作系统的部署才能分析其可行性。
首先,对于栈的判断是没有问题的,因为我们是根据在构造函数中的局部变量的距离来判断的,这个应该在任何一个操作系统中都应该是准确的,下面主要分析堆和静态存储区是否可能混淆。
1. Linux
在linux系统中,进程的步骤如下



由于静态存储区在堆的下面,而堆是向上增长的,所以无论如何某个堆到堆内某个地址的距离都不可能比到静态数据区(BSS或DATA)内某个地址的距离短,所以这种情况下,通过距离判断是正确的。
暂时还没有找到pthread线程模型的详细资料,在多线程情况下是否是正确的,因为前文中的代码的堆参考位置是同一个,如果pthread为每个线程分配独立的堆空间还可能会有问题。但是,若堆是在上图中标识的区域中进行局部分块,而不是直接到0xBFFFF FFFF以上的空间中的话也是没有问题的,事实应该也是如此,待考证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: