我试图找出列表正在使用的内存量(以字节为单位)。
此处说明了问题:
它显示一个容器列表,存储指向其他列表(存储列表)的指针,每个列表存储统一大小的元素(让每个字节数为10个字节)。因此,第一个存储列表存储4个元素,接下来的30个,然后是下一个12和10以及最后一个5个元素。所有元素都具有相同的C ++类型(它只是普通旧数据的结构)。
我的目标: 上面的容器列表应该具有当前大小变量,该变量跟踪他指向的列表的字节数(所有跟踪的空间为* prev和* next指针)。
到目前为止,我尝试过,使用分配器来跟踪列表分配的字节数(通过静态类变量)。虽然这会导致std :: list :: splice出现问题,但是当从列表see here移动元素时:不会跟踪拼接到另一个容器列表的元素。它甚至应该能够跟踪传输的字节以将该字节数添加到另一个容器列表的当前大小。
我是否必须避免使用STD分配器进行内存跟踪和 而是以某种方式使用boost的侵入式列表来跟踪内存 是什么?
什么样的C ++功能可以通过解决我的问题来支持我 问题
答案 0 :(得分:0)
我发现你可以使用EASTL分配器,因为它们绑定在每个列表对象上。
所以在EASTL :: CustomAllocator :: allocate和EASTL :: CustomAllocator :: deallocate上你可以通知主列表子列表的分配字节(这里是:存储列表)已经改变了它们的权重(这里:size in存储列表分配的字节数。
这样主列表(这里是:容器列表)总是得到一个更新的权重,它被缓存并绑定到主列表。
对于应该通知主列表的CustomAllocator,请参阅我的答案: