社区
工具平台和程序库
帖子详情
SGI STL中Alloc的问题
sogald_2001
2002-11-29 08:49:16
__default_alloc_template类中,我只看到内存的申请而从未看到释放。
请问这是为什么?
...全文
43
5
打赏
收藏
SGI STL中Alloc的问题
__default_alloc_template类中,我只看到内存的申请而从未看到释放。 请问这是为什么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sogald_2001
2002-12-01
打赏
举报
回复
我也看到了。
还是觉得不爽,如果申请的内存过大,而且一段时间后使用完了,只靠OS的话,要等程序结束,那么其它程序就没法用这些内存,配置器完全是“占着茅坑不拉屎”啦:)
而且,好象不是所有的OS都能完全回收这些内存的吧? WIN2K是可以。98好象没这么优秀吧?:)
huxw
2002-12-01
打赏
举报
回复
不直接把内存还给系统,是很一般的做法。
所有操作系统,在进程退出的时候都能够清理进程中未归还的内存。无论win9x, win2k/xp, *nix....
北极猩猩
2002-12-01
打赏
举报
回复
allocator使用的是placement new来创建对象,placement new会在给定的内存处构造一个新的对象。
allocator会首先分配一大块内存,然后将它化成不同大小的区域——再SGI STL中有8、16、24、32……128共16种类型的块。在得到内存申请时,先根据申请的找到合适的块的大小(大于申请大小的最小8的倍数),然后在对应着一块大小的free list中,找到一开内存,将这块内存分配给程序,在这块内存中调用placement new来构造对象。
在释放内存时,只需简单的将内存块放回对应的free list中。
注意,我们所说的全部动作都是在一块已经实现分配好的内存(memory pool)中进行的,所以一切的内存都在allocator的掌控之下,最后只需要对最开始分配的内存free一下,就什么都解决了,并不存在什么内存泄漏(memory leak)的问题。
在你的程序不再使用memory pool中的一块内存时,它可以被memory pool用来提供给其他对象使用,内存不会耗尽的。
这样做的主要好处是可以提高内存的利用率。因为,在使用new分配内存时,会再分配的内存区前加入一个描述内存块大小的区域(cookie)通常为4个byte,而如果你需要的内存只有8个字节岂不是很浪费,而且如果你要分配1000000个这样的对象,那浪费就更是惊人!而memory pool解决了额外开销的问题。不只是在SGI STL中,Aparch等很多经常分配大量小额内存的软件都使用了memory pool的思想。
alula
2002-12-01
打赏
举报
回复
是咯,今天也发现这个问题,总觉得是一个问题。
还有一个问题,一级配置器__malloc_alloc_template调用 free 释放一个 void*,
free(*p);
有问题吗?
earthharp
2002-11-30
打赏
举报
回复
因为modern os会回收这一部分
hou sir说的:)
SGI
STL
.zip_
sgi
stl
_
sgi
stl
_
sgi
stl
hash_m_
sgi
stl
windows
SGI
STL
,全称为Silicon Graphics Incorporated Standard Template Library,是由
SGI
公司(现为MIPS Technologies Inc.)设计和实现的一个C++标准模板库。它为C++编程提供了高效的容器、迭代器、算法和函数对象,极...
SGI
STL
vector相关源码
在
SGI
STL
源码
中
,这通常通过`
alloc
`类来完成,它实现了内存的申请与释放。 2. **构造与初始化**: - `vector`可以通过默认构造函数、指定容量构造函数、拷贝构造函数以及元素初始列表构造函数创建。源码
中
会有...
SGI
STL
源代码
- 容器的内存管理:
SGI
STL
使用了自定义的内存分配器,如
alloc
,以提高内存分配的效率和减少内存碎片。 - 红黑树实现:
SGI
STL
中
的set和map容器使用了红黑树作为底层数据结构,这种数据结构保证了插入、删除和查找...
SGI
_
STL
源码(附带个人详细)
- `__
alloc
`目录包含内存分配器的实现,这是
STL
中
所有容器的基础。 - `__detail`或`__
stl
`目录下,有容器(如`__vector_base`)、迭代器(如`__iterator_base`)和算法(如`__sort`)的实现细节。 - `__function`...
SGI
_
STL
.zip
4. **源码解析**:`
stl
-source-
sgi
-
alloc
.doc` 专门讨论了
SGI
STL
中
的内存分配器源码,这对于深入理解
STL
的工作机制非常重要。 通过阅读这些文档,开发者不仅可以了解
STL
的基本使用,还可以深入理解其内部实现机制...
工具平台和程序库
24,857
社区成员
27,330
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章