看起来保留/重新哈希函数只预先分配桶的数量,而不是要插入的元素(键,vlaue)对的内存。
有没有办法我们也可以为元素预分配内存,所以低延迟应用程序不需要在动态内存分配上浪费时间。
看起来保留/重新哈希函数只预先分配桶的数量,而不是要插入的元素(键,vlaue)对的内存。
有没有办法我们也可以为元素预分配内存,所以低延迟应用程序不需要在动态内存分配上浪费时间。
一种可能性是编写自己的分配器。如果您至少对表格中可能有多少项目有一个大致的了解(因此您可以为所有项目预先分配空间)并且不关心为项目重新使用空间,这可能会特别有效它们已从表中删除(因此您的簿记很简单)。
在这种情况下,您基本上可以为 N 个对象预先分配空间,并简单地跟踪要分配的下一个项目的位置。分配对象包括简单地返回地址和递增指针,如return *next++;
当然,这并不能真正消除动态分配——它只是让它变得足够便宜,以至于你可能不再关心它(而且由于它是作为模板参数提供的,它很有可能被内联扩展,因此您甚至不会在该过程中获得函数调用的开销。
即使您不能忍受分配器的严格限制,用于固定大小对象的通用分配器通常仍然(至少在某种程度上)比用于可变大小对象的分配器快。它仍然不会消除动态分配,但它可能会在速度上提供足够的改进,从而更好地为您的目的工作。