【问题标题】:Dynamical initialization of memory at a given memory address在给定内存地址动态初始化内存
【发布时间】:2014-01-18 15:26:54
【问题描述】:

好吧,这可能看起来很奇怪,但请多多包涵,我只是一个初学者。在过去的几天里,我一直在尝试开发一个通用的哈希函数来维护一个带有哈希表的关联数组,使用哈希函数的所有最佳部分,如 RS、JS、ELF 等,以减少哈希冲突。但现在的问题是,为了避免大量的冲突,我将不得不使用至少 6 位的无符号长值以避免冲突。

假设我只需要将学生的姓名映射到他们的分数。所以我为分数维护一个整数数组。

现在回到我的问题。

我想到的想法是使用这些值作为实际内存地址的几个低位,然后动态初始化足够大的内存以存储获得的标记的整数。对于每个增加的新值,都会重复此过程。

现在假设我设法避免了操作系统保留的所有内存位置

是否有任何可行的方法来动态地在我们喜欢的地址初始化内存,而不是让 new 运算符对其进行初始化,然后在 C++ 中返回指向该地址位置的指针。 (我正在使用 gcc)。

【问题讨论】:

  • 了解std::map
  • 对于哈希表,使用 ... 表。好吧,一个数组。喜欢。
  • 查找“placement operator new”。
  • 我知道标准映射和所有其他 STL,但请看看我的问题?
  • 不在可移植 C++ 中。您的操作系统可能具有在特定虚拟地址分配内存的功能,但我怀疑它是否适合您的场景 - 我不确定我是否理解。

标签: c++ memory dynamic hash hashtable


【解决方案1】:

它依赖于平台。在 Unix 系统上,您可以尝试使用 mmap()。 Windows 等效项是 VirtualAlloc()。但无法保证,因为该地址可能已经在使用中。

【讨论】:

猜你喜欢
  • 2023-04-03
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多