46、C/C++编程中的内存管理、循环优化与结构应用

C/C++编程中的内存管理、循环优化与结构应用

1. Oracle RDBMS与C/C++垃圾回收器

在探索Oracle RDBMS的过程中,为了研究其漏洞等信息,需要对其函数中的大型嵌套对象进行处理。由于Oracle RDBMS是一款庞大的软件,典型函数可能会接收非常大的嵌套对象作为参数,因此希望将这些对象以树或图的形式进行转储。

为了实现这一目标,通过拦截内存分配和释放函数来跟踪所有的内存分配和释放操作。当被拦截的函数获得一个指向内存块的指针时,会在已分配的内存块列表中查找该块,并获取其大小和简短名称,类似于Windows操作系统内核中的“标记”操作。

在不同的操作系统(32位或64位)上,会扫描内存块中的32位或64位字。每个字都可能是指向另一个内存块的指针,如果在记录中找到该块,就可以递归地处理它。最后,使用GraphViz工具来渲染这些对象的图形表示。

对于C/C++的垃圾回收器,以Boehm GC为例。如果一个内存块被使用,其地址必须以某种方式存在,比如作为另一个已分配块中的某个结构或数组中的指针,或者在全局分配的结构中,又或者在栈中的局部变量里。如果没有指针指向某个内存块,就可以称其为“孤立块”,这会导致内存泄漏。

Boehm GC会扫描所有已分配的内存块以查找指针,但它并不知道这些内存块中所有结构字段的数据类型。它只是将已分配的内存块和栈视为字数组,其中一些字可能是指针。如果发现某个已分配的内存块是“孤立块”,即没有其他块或栈中的指针指向它,就会认为该块不再需要并释放它。不过,扫描过程需要时间,这也是垃圾回收器常被批评的地方。

此外,像Boehm GC(用于纯C)有 GC_malloc_at

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值