C ++unordered_map有没有办法为元素预先分配内存,如果事先知道最大大小

c++ unordered_map is there a way to pre-allocate memory for elements if max size known in advance

本文关键字:如果 内存 分配 先知 有没有 map ++unordered 元素      更新时间:2023-10-16

看起来保留/重新哈希函数只预先分配存储桶的数量,而不是要插入的元素(键,vlaue)对的内存。

有没有办法我们也可以为元素预先分配内存,这样低延迟的应用程序就不需要在动态内存分配上浪费时间。

一种可能性是编写自己的分配器。如果您至少对表中可能出现的项目数量有一个公平的了解(因此您可以为所有项目预先分配空间),并且不关心从表中删除项目时重新使用项目的空间(因此您的簿记很简单),这将特别有效。

在这种情况下,您基本上可以为 N 个对象预先分配空间,并简单地跟踪要分配的下一个项目的位置。分配对象包括简单地返回地址和递增指针,如return *next++;

当然,这并不能真正消除动态分配 - 它只是使它足够便宜,以至于您可能不再关心它(并且由于它是作为模板参数提供的,因此很有可能将其内联扩展,因此您甚至不会在此过程中获得函数调用的开销。

即使你不能忍受分配器的限制,固定大小对象的通用分配器通常仍然(至少在某种程度上)比可变大小对象的分配器快。它仍然不会消除动态分配,但它可能会在速度上提供足够的改进,从而更好地满足您的目的。

相关文章: