多谢回复,可能我的描述不很准确。
是的,当申请5个字节时,系统不会直接分配一个page,但是缺省的分配策略比较大颗粒度,比如windows上面(64位),申请1-15字节,会分配16字节,对于大量的小对象是不能容忍的。申请1M个1字节的小对象,会占用16M内存。如果使用vector,则会占用1M内存。
在前面的大佬说过,可以使用内存池,比如mimalloc, tcmalloc,jemalloc等,可以支持小颗粒度的分配,减少内存占用。
【 在 poggy 的大作中提到: 】
: 你的这个理解是不准确的, new是在堆上分配内存,运行时库考虑访问效率, 会做一些对齐,
: 导致多分配一些内存, 但是, 内存分配时按需提供的, 不会你请求5字节, 就分配你2k,
: 小内存浪费, 是因为, 每个请求块,也需要在堆上做管理, 所以会有额外的登记管理开销。
: ...................
--
FROM 219.236.40.*