【 在 coolrocky 的大作中提到: 】
: 在C++程序中,如果直接new一个尺寸很小的对象,比如5个字节,系统会根据分页规则分配一个比较大的内存,如果大量分配小对象,会造成大量的内存浪费。
: 有没有办法可以控制内存分配,只分配sizeof大小的内存。
: 一种变通方法是使用vector,还有更简洁的办法或者开源项目吗?多谢多谢
你的这个理解是不准确的, new是在堆上分配内存,运行时库考虑访问效率, 会做一些对齐,
导致多分配一些内存, 但是, 内存分配时按需提供的, 不会你请求5字节, 就分配你2k,
小内存浪费, 是因为, 每个请求块,也需要在堆上做管理, 所以会有额外的登记管理开销。
随着分配释放的频繁发生, 也可能产生空洞碎块,导致分配效率下降。另外, 堆管理程序优化没那么弱,
它们针对大量的相同字节的重复内存块请求, 也会有类似快表的结果, 就是把相同字节的小块内存,
释放后,放到叫快表的链表里, 有相同请求, 会直接取下返回。
--
FROM 115.171.244.*