社区
工具平台和程序库
帖子详情
SGI STL中Alloc的问题
sogald_2001
2002-11-29 08:49:16
__default_alloc_template类中,我只看到内存的申请而从未看到释放。
请问这是为什么?
...全文
32
5
打赏
收藏
SGI STL中Alloc的问题
__default_alloc_template类中,我只看到内存的申请而从未看到释放。 请问这是为什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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说的:)
STL
源码剖析.pdg
1.9.1
stl
_config.h
中
的各种组态 027 组态3:static template member 027 组态5:class template partial specialization 028 组态6:function template partial order 028 组态7:explicit function template ...
STL
源码剖析(侯捷先生译著)
SGI
STL
内部文件(
SGI
STL
真正实现于此) 018 1.8.3
SGI
STL
的组态设定(configuration) 019 1.9可能令你困惑的C++ 语法 026 1.9.1
stl
_config.h
中
的各种组态 027 组态3:static template member 027 组态5...
深入解析函数指针与返回函数的指针
先看看以下两个代码:1:出自
STL
-
SGI
源码<
stl
> 代码如下:static void (*__set_m
alloc
_handler(void (*__f)()))(){ void (*__old)()=__m
alloc
_
alloc
_oom_handler; __m
alloc
_
alloc
_oom_handler=__f; return (__old);...
有关
SGI
STL
的
alloc
目录主要还是说说
SGI
版本的
STL
的配置器我们知道,
stl
有容器,空间配置器,适配器,迭代器,仿函数以及算法这6个组件:他们之间的运行关系大概是:容器通过配置器去获得数据和存储空间,算法通过迭代器获取容器内容,...
SGI
STL
中
的
alloc
1.
SGI
STL
实现版本
SGI
版本由Silicon Graphics Computer System, Inc公司发展,继承HP版本。所以它的每一个头文件也都有HP的版本声明。此外还加上
SGI
的公司版权声明。主要设计者仍然是
STL
之父Alexandar ...
工具平台和程序库
24,855
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章